mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-29 17:50:18 +00:00
Kernel 0.9.1 : ASM rewrite....new SLIST API
This commit is contained in:
parent
4829797475
commit
db753146f6
@ -284,51 +284,55 @@ Create a new copy of this C-String
|
|||||||
+ CS : error
|
+ CS : error
|
||||||
+ A = SYS error code
|
+ A = SYS error code
|
||||||
|
|
||||||
# SListNew
|
# SListAdd
|
||||||
|
|
||||||
## In:
|
## In:
|
||||||
|
+ PUSHB = hSList
|
||||||
|
+ PUSHW = Key Ptr
|
||||||
|
+ PUSHW = Data Ptr
|
||||||
|
|
||||||
## Out:
|
## Out:
|
||||||
+ A=hMem
|
+ A = Key Length
|
||||||
|
|
||||||
|
# SListLookup
|
||||||
|
|
||||||
|
## In:
|
||||||
|
+ PUSHB = hSList
|
||||||
|
+ PUSHW = Key Ptr
|
||||||
|
+ PUSHW = Data Ptr
|
||||||
|
|
||||||
|
## Out:
|
||||||
|
+ A = Key Length
|
||||||
|
+ X,Y = KeyID
|
||||||
|
|
||||||
# SListGetByID
|
# SListGetByID
|
||||||
|
|
||||||
|
## In:
|
||||||
|
+ PUSHB = hSList
|
||||||
|
+ PUSHW = KeyID
|
||||||
|
+ PUSHW = Data Ptr (KEY+DATA)
|
||||||
|
|
||||||
|
## Out:
|
||||||
|
+ Y,A = Next ID
|
||||||
|
|
||||||
|
# SListUpdateByID
|
||||||
|
|
||||||
## In:
|
## In:
|
||||||
+ PUSHB = hSList
|
+ PUSHB = hSList
|
||||||
+ PUSHW = KeyID
|
+ PUSHW = KeyID
|
||||||
+ PUSHW = Data Ptr
|
+ PUSHW = Data Ptr
|
||||||
|
|
||||||
## Out:
|
## Out:
|
||||||
|
+ A = Key Length
|
||||||
|
+ X,Y = KeyID
|
||||||
|
|
||||||
# SListAdd
|
# SListNew
|
||||||
|
|
||||||
## In:
|
## In:
|
||||||
+ PUSHB = hSList
|
|
||||||
+ PUSHW = Key
|
|
||||||
+ PUSHW = Data Ptr
|
|
||||||
|
|
||||||
## Out:
|
## Out:
|
||||||
+ A=hSList
|
+ A=hSList
|
||||||
|
|
||||||
# SListLookup
|
|
||||||
|
|
||||||
## In:
|
|
||||||
+ PUSHB = hSList
|
|
||||||
+ PUSHW = Key
|
|
||||||
+ PUSHW = Data Ptr
|
|
||||||
|
|
||||||
## Out:
|
|
||||||
+ Data Ptr Updated
|
|
||||||
|
|
||||||
# SListUpdate
|
|
||||||
|
|
||||||
## In:
|
|
||||||
+ PUSHB = hSList
|
|
||||||
+ PUSHW = Key
|
|
||||||
+ PUSHW = Data Ptr
|
|
||||||
|
|
||||||
## Out:
|
|
||||||
|
|
||||||
# SListFree
|
# SListFree
|
||||||
|
|
||||||
## In:
|
## In:
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -173,31 +173,51 @@ EXP.SetAccA sta SRC.ACC
|
|||||||
stz SRC.ACC+3
|
stz SRC.ACC+3
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
EXP.GetSymbol >LDYA L.SRC.ELabel.Len
|
EXP.GetSymbol >PUSHB.G SYM.hGlobals
|
||||||
jsr SRC.GetLabel
|
>PUSHW ZPLinePtr
|
||||||
bcs EXP.EvalExitSYN
|
>PUSHEA.G SYM.Value
|
||||||
|
|
||||||
>LDYA L.SRC.ELabel.Flags
|
>SYSCALL SListLookup
|
||||||
jsr SYM.SearchGlobal
|
bcs .2
|
||||||
|
|
||||||
|
adc ZPLinePtr
|
||||||
|
sta ZPLinePtr
|
||||||
bcc .1
|
bcc .1
|
||||||
|
|
||||||
ldy #ASM.PASS
|
inc ZPLinePtr+1
|
||||||
|
|
||||||
|
.1 clc
|
||||||
|
rts
|
||||||
|
|
||||||
|
.2 ldy #ASM.PASS
|
||||||
lda (pData),y pass#2?
|
lda (pData),y pass#2?
|
||||||
bne EXP.EvalExitUND yes, undefined symbol
|
bne .99 yes, undefined symbol
|
||||||
|
|
||||||
lda #$C0 Valid+Pending
|
>PUSHB.G SYM.hGlobals
|
||||||
sta SRC.ELabel.Flags
|
>PUSHW ZPLinePtr
|
||||||
>LDYA L.SRC.ELabel.Flags
|
>PUSHEA.G SYM.Value
|
||||||
jsr SYM.AddGToGBlockYA
|
|
||||||
|
lda #6
|
||||||
|
>STA.G SYM.Value+SYM.LEN
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
>STA.G SYM.Value+SYM.F
|
||||||
|
|
||||||
|
>SYSCALL SListAdd
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
adc ZPLinePtr
|
||||||
|
sta ZPLinePtr
|
||||||
|
bcc .3
|
||||||
|
|
||||||
|
inc ZPLinePtr+1
|
||||||
|
|
||||||
|
.3 clc
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.1 ldx #3
|
.99 lda #ERR.UNDEF.SYMBOL
|
||||||
.2 lda SRC.FLabel.Value,x
|
sec
|
||||||
sta SRC.ACC,x
|
.9 rts
|
||||||
dex
|
|
||||||
bpl .2
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
EXP.Compute dec
|
EXP.Compute dec
|
||||||
asl
|
asl
|
||||||
|
@ -116,12 +116,6 @@ SRC.ParseLine.Ok lda SRC.GLabel.New
|
|||||||
bne .8 yes, nothing to do
|
bne .8 yes, nothing to do
|
||||||
* --- Pass #1
|
* --- Pass #1
|
||||||
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
>LDYA L.SRC.GLabel.Flags
|
>LDYA L.SRC.GLabel.Flags
|
||||||
jsr SYM.SearchGlobal
|
jsr SYM.SearchGlobal
|
||||||
bcs .1 if CS, not found, add
|
bcs .1 if CS, not found, add
|
||||||
@ -172,34 +166,9 @@ SRC.ParseLine.SymL jsr SRC.GetNextChar
|
|||||||
bne SRC.ParseLine.SymE Max .255
|
bne SRC.ParseLine.SymE Max .255
|
||||||
lda SRC.ACC
|
lda SRC.ACC
|
||||||
beq SRC.ParseLine.SymE .0 is not allowed
|
beq SRC.ParseLine.SymE .0 is not allowed
|
||||||
sta SRC.LLabel.ID
|
|
||||||
|
|
||||||
ldy #ASM.PC
|
clc
|
||||||
lda (pData),y
|
rts
|
||||||
ldy #ASM.PC.GLABEL
|
|
||||||
sec
|
|
||||||
sbc (pData),y
|
|
||||||
sta SRC.LLabel.Offset
|
|
||||||
|
|
||||||
ldy #ASM.PC+1
|
|
||||||
lda (pData),y
|
|
||||||
ldy #ASM.PC.GLABEL+1
|
|
||||||
sbc (pData),y
|
|
||||||
bne SRC.ParseLine.SymR
|
|
||||||
|
|
||||||
ldy #ASM.PC+2
|
|
||||||
lda (pData),y
|
|
||||||
ldy #ASM.PC.GLABEL+2
|
|
||||||
sbc (pData),y
|
|
||||||
bne SRC.ParseLine.SymR
|
|
||||||
|
|
||||||
ldy #ASM.PC+3
|
|
||||||
lda (pData),y
|
|
||||||
ldy #ASM.PC.GLABEL+3
|
|
||||||
sbc (pData),y
|
|
||||||
bne SRC.ParseLine.SymR
|
|
||||||
bcc SRC.ParseLine.SymR
|
|
||||||
jmp SYM.AddLToGBlock
|
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SRC.ParseLine.SymE lda #ERR.INV.LABEL
|
SRC.ParseLine.SymE lda #ERR.INV.LABEL
|
||||||
sec
|
sec
|
||||||
@ -209,31 +178,20 @@ SRC.ParseLine.SymR lda #ERR.RANGE
|
|||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SRC.ParseLine.SymG >LDYA L.SRC.GLabel.Len
|
SRC.ParseLine.SymG >PUSHB.G SYM.hGlobals
|
||||||
jsr SRC.GetLabel
|
>PUSHW ZPLinePtr
|
||||||
|
>PUSHEA.G SYM.Value
|
||||||
|
|
||||||
|
>SYSCALL SListAdd
|
||||||
bcs SRC.ParseLine.SymE
|
bcs SRC.ParseLine.SymE
|
||||||
|
|
||||||
ldx #3 Makes Current Label = PC for now
|
adc ZPLinePtr
|
||||||
ldy #ASM.PC+3
|
sta ZPLinePtr
|
||||||
|
bcc .1
|
||||||
|
|
||||||
.1 lda (pData),y
|
inc ZPLinePtr+1
|
||||||
sta SRC.GLabel.Value,x
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .1
|
|
||||||
|
|
||||||
ldx #3 Makes Current Label = Ref for next local
|
.1
|
||||||
ldy #ASM.PC.GLABEL+3
|
|
||||||
|
|
||||||
.2 lda SRC.GLabel.Value,x
|
|
||||||
sta (pData),y
|
|
||||||
dey
|
|
||||||
dex
|
|
||||||
bpl .2
|
|
||||||
|
|
||||||
lda #$80 Mark GLabel Flag...
|
|
||||||
sta SRC.GLabel.Flags
|
|
||||||
sta SRC.GLabel.New
|
|
||||||
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
@ -682,49 +640,6 @@ SRC.GetBinary stz SRC.ACC+1
|
|||||||
sec
|
sec
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SRC.GetLabel >STYA ZPPtr1
|
|
||||||
|
|
||||||
lda (ZPLinePtr)
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
jsr SRC.IsLetter
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
ldy #1
|
|
||||||
sta (ZPPtr1),y
|
|
||||||
|
|
||||||
.1 jsr SRC.GetNextCharUC
|
|
||||||
beq .8
|
|
||||||
|
|
||||||
jsr SRC.IsLetterOrDigit
|
|
||||||
bcc .2
|
|
||||||
cmp #'.'
|
|
||||||
beq .2
|
|
||||||
|
|
||||||
cmp #'_'
|
|
||||||
beq .2
|
|
||||||
|
|
||||||
cmp #' '
|
|
||||||
beq .8
|
|
||||||
jsr SRC.IsEXPReserved
|
|
||||||
bcc .8
|
|
||||||
jsr SRC.IsAMReserved
|
|
||||||
bcc .8
|
|
||||||
|
|
||||||
.9 lda #ERR.SYNTAX.ERROR
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
|
|
||||||
.2 iny
|
|
||||||
sta (ZPPtr1),y
|
|
||||||
cpy #SRC.GLABEL.MAXLEN
|
|
||||||
bcc .1 if equ Carry is set
|
|
||||||
|
|
||||||
.8 tya
|
|
||||||
sta (ZPPtr1)
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*---------------------------------------
|
|
||||||
SRC.GetKeyword >STYA ZPPtr1 KeyWord table
|
SRC.GetKeyword >STYA ZPPtr1 KeyWord table
|
||||||
|
|
||||||
stz SRC.Keyword.ID
|
stz SRC.Keyword.ID
|
||||||
|
@ -3,14 +3,12 @@ PREFIX /A2OSX.BUILD
|
|||||||
AUTO 4,1
|
AUTO 4,1
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
* Global Symbol Record: (8+ bytes)
|
* Global Symbol Record: (8+ bytes)
|
||||||
* 0 : Flags:
|
* 0 : Len (6)
|
||||||
* b7=Valid Entry
|
* 1 : Flags:
|
||||||
* b6=pending
|
* b7=0=pending,1=resolved
|
||||||
* b0=R/W (.SE)
|
* b6=R/W (.SE)
|
||||||
* 1-4 : 32 bits Value
|
* 2-5 : 32 bits Value
|
||||||
* 5 : Len
|
*
|
||||||
* 6-... Name
|
|
||||||
* ......
|
|
||||||
* Local Symbol Record: (2 bytes)
|
* Local Symbol Record: (2 bytes)
|
||||||
* 2 : Local ID (1->255)
|
* 2 : Local ID (1->255)
|
||||||
* 3 : offset from Global Symbol
|
* 3 : offset from Global Symbol
|
||||||
@ -28,96 +26,23 @@ AUTO 4,1
|
|||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
* Macro Record: ( bytes)
|
* Macro Record: ( bytes)
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SYM.Init jmp SYM.NewGBlock
|
SYM.Init >SYSCALL SListNew
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
>STA.G SYM.hGlobals
|
||||||
|
.9 rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SYM.Quit ldy #SYM.pLastGBlock
|
SYM.Quit >LDA.G SYM.hGlobals
|
||||||
lda (pData),y
|
>SYSCALL SListFree.A
|
||||||
beq .8
|
|
||||||
|
|
||||||
.1 clc
|
|
||||||
adc #SYM.hGBlocks-1
|
|
||||||
tay
|
|
||||||
lda (pData),y
|
|
||||||
>SYSCALL FreeMem.A
|
|
||||||
ldy #SYM.pLastGBlock
|
|
||||||
lda (pData),y
|
|
||||||
dec
|
|
||||||
sta (pData),y
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
.8 clc
|
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SYM.Dump >LDYA L.MSG.SYMBOLS
|
SYM.Dump >LDYA L.MSG.SYMBOLS
|
||||||
>SYSCALL PrintF.YA
|
>SYSCALL PrintF.YA
|
||||||
|
|
||||||
ldy #SYM.DumpCount
|
|
||||||
lda #20
|
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
jsr SYM.ResetGBlockPtr
|
|
||||||
|
|
||||||
.1 jsr SYM.GetByteGBlock Get Flags
|
|
||||||
sta SRC.GLabel.Flags
|
|
||||||
bne .10
|
|
||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
|
*---------------------------------------
|
||||||
.10 ldx #0
|
SYM.AddPending
|
||||||
.2 jsr SYM.GetByteGBlock
|
|
||||||
sta SRC.GLabel.Value,x
|
|
||||||
inx
|
|
||||||
cpx #5
|
|
||||||
bne .2 Get Value+Len
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
.3 jsr SYM.GetByteGBlock
|
|
||||||
sta SRC.GLabel.Name,x
|
|
||||||
inx
|
|
||||||
cpx SRC.GLabel.Len
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
>PUSHW L.SRC.GLabel.Len
|
|
||||||
|
|
||||||
lda SRC.GLabel.Value+1
|
|
||||||
>PUSHA
|
|
||||||
lda SRC.GLabel.Value
|
|
||||||
>PUSHA
|
|
||||||
lda SRC.GLabel.Value+3
|
|
||||||
>PUSHA
|
|
||||||
lda SRC.GLabel.Value+2
|
|
||||||
>PUSHA
|
|
||||||
|
|
||||||
>LDYA L.MSG.GSYMBOL
|
|
||||||
>SYSCALL PrintF.YA
|
|
||||||
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
.4 jsr SYM.GetByteGBlock
|
|
||||||
beq .5 End Locals...proceed next Global
|
|
||||||
|
|
||||||
pha
|
|
||||||
jsr SYM.GetByteGBlock
|
|
||||||
>PUSHA
|
|
||||||
pla
|
|
||||||
>PUSHA
|
|
||||||
>LDYA L.MSG.LSYMBOL
|
|
||||||
>SYSCALL PrintF.YA
|
|
||||||
bcc .4
|
|
||||||
rts
|
|
||||||
|
|
||||||
.5 lda #13
|
|
||||||
>SYSCALL PutChar.A
|
|
||||||
|
|
||||||
ldy #SYM.DumpCount
|
|
||||||
lda (pData),y
|
|
||||||
dec
|
|
||||||
bne .6
|
|
||||||
|
|
||||||
lda #20
|
|
||||||
.6 sta (pData),y
|
|
||||||
jmp .1
|
|
||||||
.9 rts
|
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SYM.AddPrivate
|
SYM.AddPrivate
|
||||||
clc
|
clc
|
||||||
@ -143,206 +68,7 @@ SYM.SearchLocal
|
|||||||
clc
|
clc
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SYM.SearchGlobal >STYA ZPSymbolPtr
|
SYM.SearchGlobal clc
|
||||||
|
|
||||||
jsr SYM.ResetGBlockPtr
|
|
||||||
|
|
||||||
.1 ldy #SYM.iCurGBlock
|
|
||||||
lda (pData),y
|
|
||||||
sta SYM.iCurGBlock.Save
|
|
||||||
ldy #SYM.pCurGBlock
|
|
||||||
lda (pData),y
|
|
||||||
sta SYM.pCurGBlock.Save
|
|
||||||
|
|
||||||
jsr SYM.GetByteGBlock Get Flags
|
|
||||||
beq .9
|
|
||||||
sta SRC.FLabel.Flags
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
|
|
||||||
.2 jsr SYM.GetByteGBlock
|
|
||||||
sta SRC.FLabel.Value,x
|
|
||||||
inx
|
|
||||||
cpx #5
|
|
||||||
bne .2 Get Value+Len
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
.3 jsr SYM.GetByteGBlock
|
|
||||||
sta SRC.FLabel.Name,x
|
|
||||||
inx
|
|
||||||
cpx SRC.FLabel.Len
|
|
||||||
bne .3
|
|
||||||
|
|
||||||
txa
|
|
||||||
ldy #5
|
|
||||||
cmp (ZPSymbolPtr),y
|
|
||||||
bne .5
|
|
||||||
|
|
||||||
ldx #0
|
|
||||||
.4 inx
|
|
||||||
iny
|
|
||||||
lda SRC.FLabel.Name-1,x
|
|
||||||
cmp (ZPSymbolPtr),y
|
|
||||||
bne .5
|
|
||||||
cpx SRC.FLabel.Len
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
lda SYM.pCurGBlock.Save
|
|
||||||
ldy #SYM.pCurGBlock
|
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
lda SYM.iCurGBlock.Save
|
|
||||||
ldy #SYM.iCurGBlock
|
|
||||||
sta (pData),y
|
|
||||||
jmp SYM.GetGBlockA
|
|
||||||
|
|
||||||
.5 jsr SYM.GetByteGBlock skip Locals
|
|
||||||
beq .1
|
|
||||||
jsr SYM.GetByteGBlock
|
|
||||||
bra .5
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*---------------------------------------
|
|
||||||
SYM.AddGToGBlockYA >STYA ZPSymbolPtr
|
|
||||||
|
|
||||||
jsr SYM.SetGBlockPtr
|
|
||||||
|
|
||||||
ldy #SYM.pLastGBlock 1st Gblock to add?
|
|
||||||
lda (pData),y
|
|
||||||
ldy #SYM.iLastGBlock
|
|
||||||
ora (pData),y
|
|
||||||
beq .10 yes, skip closing previous one
|
|
||||||
|
|
||||||
lda #0 Close Pending Global/Local
|
|
||||||
jsr SYM.AddByteGBlock
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
.10 ldy #0
|
|
||||||
|
|
||||||
.1 lda (ZPSymbolPtr),y
|
|
||||||
jsr SYM.AddByteGBlock
|
|
||||||
bcs .9
|
|
||||||
iny
|
|
||||||
cpy #5
|
|
||||||
bne .1 moved Flags & Value to GBlock....
|
|
||||||
|
|
||||||
lda (ZPSymbolPtr),y Get Len
|
|
||||||
tax
|
|
||||||
jsr SYM.AddByteGBlock
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
.2 iny
|
|
||||||
lda (ZPSymbolPtr),y
|
|
||||||
jsr SYM.AddByteGBlock
|
|
||||||
bcs .9
|
|
||||||
dex
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*---------------------------------------
|
|
||||||
SYM.AddLToGBlock jsr SYM.SetGBlockPtr
|
|
||||||
|
|
||||||
lda SRC.LLabel.ID
|
|
||||||
jsr SYM.AddByteGBlock
|
|
||||||
bcs .9
|
|
||||||
|
|
||||||
lda SRC.LLabel.Offset
|
|
||||||
jmp SYM.AddByteGBlock
|
|
||||||
.9 rts
|
|
||||||
*---------------------------------------
|
|
||||||
SYM.GetByteGBlock ldy #SYM.iCurGBlock
|
|
||||||
lda (pData),y
|
|
||||||
tay
|
|
||||||
lda (ZPBlockPtr),y
|
|
||||||
pha
|
|
||||||
|
|
||||||
ldy #SYM.iCurGBlock
|
|
||||||
lda (pData),y
|
|
||||||
inc
|
|
||||||
sta (pData),y
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
ldy #SYM.pCurGBlock
|
|
||||||
lda (pData),y
|
|
||||||
inc
|
|
||||||
sta (pData),y
|
|
||||||
jsr SYM.GetGBlockA
|
|
||||||
|
|
||||||
.1 pla
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*---------------------------------------
|
|
||||||
SYM.ResetGBlockPtr lda #0
|
|
||||||
ldy #SYM.pCurGBlock
|
|
||||||
sta (pData),y
|
|
||||||
ldy #SYM.iCurGBlock
|
|
||||||
sta (pData),y
|
|
||||||
bra SYM.GetGBlockA
|
|
||||||
*---------------------------------------
|
|
||||||
SYM.SetGBlockPtr ldy #SYM.pLastGBlock
|
|
||||||
lda (pData),y
|
|
||||||
|
|
||||||
SYM.GetGBlockA clc
|
|
||||||
adc #SYM.hGBlocks-1
|
|
||||||
tay
|
|
||||||
lda (pData),y
|
|
||||||
phx
|
|
||||||
>SYSCALL GetMemPtr.A
|
|
||||||
>STYA ZPBlockPtr
|
|
||||||
plx
|
|
||||||
rts
|
|
||||||
*---------------------------------------
|
|
||||||
SYM.AddByteGBlock phx
|
|
||||||
phy
|
|
||||||
pha
|
|
||||||
ldy #SYM.iLastGBlock
|
|
||||||
lda (pData),y
|
|
||||||
tay
|
|
||||||
|
|
||||||
pla
|
|
||||||
sta (ZPBlockPtr),y
|
|
||||||
|
|
||||||
tya
|
|
||||||
inc
|
|
||||||
beq SYM.NewGBlock2
|
|
||||||
|
|
||||||
ldy #SYM.iLastGBlock
|
|
||||||
sta (pData),y
|
|
||||||
ply
|
|
||||||
plx
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*---------------------------------------
|
|
||||||
SYM.NewGBlock phx
|
|
||||||
phy
|
|
||||||
SYM.NewGBlock2 >LDYAI 256
|
|
||||||
>SYSCALL GetMem0.YA
|
|
||||||
|
|
||||||
bcs .9
|
|
||||||
>STYA ZPBlockPtr
|
|
||||||
|
|
||||||
ldy #SYM.pLastGBlock
|
|
||||||
lda (pData),y
|
|
||||||
inc
|
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
clc
|
|
||||||
adc #SYM.hGBlocks-1
|
|
||||||
tay
|
|
||||||
|
|
||||||
txa
|
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
lda #0
|
|
||||||
ldy #SYM.iLastGBlock
|
|
||||||
sta (pData),y
|
|
||||||
|
|
||||||
clc
|
|
||||||
|
|
||||||
.9 ply
|
|
||||||
plx
|
|
||||||
rts
|
rts
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
MAN
|
MAN
|
||||||
|
@ -21,18 +21,18 @@ ZPAMPtr .EQ ZPBIN+16
|
|||||||
ZPRPtr .EQ ZPBIN+18
|
ZPRPtr .EQ ZPBIN+18
|
||||||
ZPOPtr .EQ ZPBIN+20
|
ZPOPtr .EQ ZPBIN+20
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
|
SYM.LEN .EQ 0
|
||||||
|
SYM.F .EQ 1
|
||||||
|
SYM.F.RESOLVED .EQ %1000000
|
||||||
|
SYM.F.RW .EQ %0100000
|
||||||
|
SYM.V .EQ 2
|
||||||
|
*---------------------------------------
|
||||||
ASM.T.AM .EQ 0
|
ASM.T.AM .EQ 0
|
||||||
ASM.T.R .EQ 2
|
ASM.T.R .EQ 2
|
||||||
ASM.T.O .EQ 4
|
ASM.T.O .EQ 4
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
SRC.DO.MAXDEPTH .EQ 8
|
SRC.DO.MAXDEPTH .EQ 8
|
||||||
SRC.IN.MAXDEPTH .EQ 7
|
SRC.IN.MAXDEPTH .EQ 7
|
||||||
SRC.GLABEL.MAXLEN .EQ 32
|
|
||||||
*---------------------------------------
|
|
||||||
SYM.GBLOCK.MAX .EQ 96 96*256=24k
|
|
||||||
SYM.SBLOCK.MAX .EQ 16 16*256=4k
|
|
||||||
SYM.PBLOCK.MAX .EQ 32 32*256=8k
|
|
||||||
SYM.MBLOCK.MAX .EQ 32 32*256=8k
|
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
ERR.INV.ARGS .EQ $80
|
ERR.INV.ARGS .EQ $80
|
||||||
ERR.SRC.INV.TYPE .EQ $90
|
ERR.SRC.INV.TYPE .EQ $90
|
||||||
@ -88,10 +88,6 @@ L.MSG.SRC.FILE .DA MSG.SRC.FILE
|
|||||||
L.MSG.OBJ.FILE .DA MSG.OBJ.FILE
|
L.MSG.OBJ.FILE .DA MSG.OBJ.FILE
|
||||||
L.MSG.T.FILE .DA MSG.T.FILE
|
L.MSG.T.FILE .DA MSG.T.FILE
|
||||||
L.SRC.AM.StrBuf .DA SRC.AM.StrBuf
|
L.SRC.AM.StrBuf .DA SRC.AM.StrBuf
|
||||||
L.SRC.GLabel.Flags .DA SRC.GLabel.Flags
|
|
||||||
L.SRC.GLabel.Len .DA SRC.GLabel.Len
|
|
||||||
L.SRC.ELabel.Flags .DA SRC.ELabel.Flags
|
|
||||||
L.SRC.ELabel.Len .DA SRC.ELabel.Len
|
|
||||||
L.ASM.6502 .DA ASM.6502
|
L.ASM.6502 .DA ASM.6502
|
||||||
L.ASM.T.FILENAME .DA ASM.T.FILENAME
|
L.ASM.T.FILENAME .DA ASM.T.FILENAME
|
||||||
L.FIO.Stat .DA FIO.Stat
|
L.FIO.Stat .DA FIO.Stat
|
||||||
@ -397,9 +393,6 @@ FIO.Stat .BS S.STAT
|
|||||||
EXP.Operator .BS 1
|
EXP.Operator .BS 1
|
||||||
EXP.Modifier .BS 1
|
EXP.Modifier .BS 1
|
||||||
|
|
||||||
SYM.iCurGBlock.Save .BS 1
|
|
||||||
SYM.pCurGBlock.Save .BS 1
|
|
||||||
|
|
||||||
SRC.LINENUM .BS 2
|
SRC.LINENUM .BS 2
|
||||||
SRC.LinePtrSave .BS 2
|
SRC.LinePtrSave .BS 2
|
||||||
SRC.Directive.ID .BS 1
|
SRC.Directive.ID .BS 1
|
||||||
@ -410,21 +403,6 @@ SRC.ARG .BS 4
|
|||||||
SRC.AM.ID .BS 1
|
SRC.AM.ID .BS 1
|
||||||
SRC.AM.StrBuf .BS 32
|
SRC.AM.StrBuf .BS 32
|
||||||
SRC.AM.tmpBuf .BS 32
|
SRC.AM.tmpBuf .BS 32
|
||||||
SRC.GLabel.New .BS 1
|
|
||||||
SRC.GLabel.Flags .BS 1
|
|
||||||
SRC.GLabel.Value .BS 4
|
|
||||||
SRC.GLabel.Len .BS 1
|
|
||||||
SRC.GLabel.Name .BS SRC.GLABEL.MAXLEN
|
|
||||||
SRC.LLabel.ID .BS 1
|
|
||||||
SRC.LLabel.Offset .BS 1
|
|
||||||
SRC.ELabel.Flags .BS 1
|
|
||||||
SRC.ELabel.Value .BS 4
|
|
||||||
SRC.ELabel.Len .BS 1
|
|
||||||
SRC.ELabel.Name .BS SRC.GLABEL.MAXLEN
|
|
||||||
SRC.FLabel.Flags .BS 1
|
|
||||||
SRC.FLabel.Value .BS 4
|
|
||||||
SRC.FLabel.Len .BS 1
|
|
||||||
SRC.FLabel.Name .BS SRC.GLABEL.MAXLEN
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
.DUMMY
|
.DUMMY
|
||||||
.OR 0
|
.OR 0
|
||||||
@ -446,29 +424,6 @@ DST.hFILETYPE .BS 1
|
|||||||
|
|
||||||
ASM.T.hMem .BS 1
|
ASM.T.hMem .BS 1
|
||||||
|
|
||||||
SYM.hCurSBlock .BS 1
|
|
||||||
SYM.iCurSBlock .BS 1
|
|
||||||
SYM.LastSBlock .BS 1
|
|
||||||
SYM.hSBlocks .BS SYM.SBLOCK.MAX
|
|
||||||
|
|
||||||
SYM.pCurGBlock .BS 1
|
|
||||||
SYM.iCurGBlock .BS 1
|
|
||||||
SYM.pLastGBlock .BS 1
|
|
||||||
SYM.iLastGBlock .BS 1
|
|
||||||
SYM.hGBlocks .BS SYM.GBLOCK.MAX
|
|
||||||
|
|
||||||
SYM.hCurPBlock .BS 1
|
|
||||||
SYM.iCurPBlock .BS 1
|
|
||||||
SYM.LastPBlock .BS 1
|
|
||||||
SYM.hPBlocks .BS SYM.PBLOCK.MAX
|
|
||||||
|
|
||||||
SYM.hCurMBlock .BS 1
|
|
||||||
SYM.iCurMBlock .BS 1
|
|
||||||
SYM.LastMBlock .BS 1
|
|
||||||
SYM.hMBlocks .BS SYM.MBLOCK.MAX
|
|
||||||
|
|
||||||
SYM.DumpCount .BS 1
|
|
||||||
|
|
||||||
DIR.Counter .BS 2
|
DIR.Counter .BS 2
|
||||||
DIR.Byte .BS 1
|
DIR.Byte .BS 1
|
||||||
|
|
||||||
@ -487,6 +442,9 @@ ASM.PC.GLABEL .BS 4
|
|||||||
ASM.LOCAL.OFFSET .BS 1
|
ASM.LOCAL.OFFSET .BS 1
|
||||||
ASM.LOCAL.INVALID .BS 1
|
ASM.LOCAL.INVALID .BS 1
|
||||||
ASM.SYM.ID .BS 2
|
ASM.SYM.ID .BS 2
|
||||||
|
|
||||||
|
SYM.hGlobals .BS 1
|
||||||
|
SYM.Value .BS 6
|
||||||
DS.END .ED
|
DS.END .ED
|
||||||
*---------------------------------------
|
*---------------------------------------
|
||||||
.DO DS.END-DS.START>$FF
|
.DO DS.END-DS.START>$FF
|
||||||
|
@ -213,14 +213,14 @@ SYS.GetMemByID.A .EQ $E6
|
|||||||
SYS.GetMem.YA .EQ $E8
|
SYS.GetMem.YA .EQ $E8
|
||||||
SYS.GetMem0.YA .EQ $EA
|
SYS.GetMem0.YA .EQ $EA
|
||||||
SYS.NewStr.YA .EQ $EC
|
SYS.NewStr.YA .EQ $EC
|
||||||
* .EQ $EE
|
SYS.SListAdd .EQ $EE
|
||||||
|
|
||||||
* .EQ $F0
|
SYS.SListLookup .EQ $F0
|
||||||
* .EQ $F2
|
SYS.SListGetByID .EQ $F2
|
||||||
* .EQ $F4
|
SYS.SListUpdateByID .EQ $F4
|
||||||
* .EQ $F6
|
SYS.SListNew .EQ $F6
|
||||||
|
|
||||||
* .EQ $F8
|
SYS.SListFree.A .EQ $F8
|
||||||
SYS.LoadStkObj .EQ $FA
|
SYS.LoadStkObj .EQ $FA
|
||||||
SYS.NewStkObj.YA .EQ $FC
|
SYS.NewStkObj.YA .EQ $FC
|
||||||
SYS.FreeStkObj.A .EQ $FE
|
SYS.FreeStkObj.A .EQ $FE
|
||||||
@ -245,7 +245,6 @@ K.E.FTB .EQ $CC File Too Big Error
|
|||||||
* MEM STRUCT
|
* MEM STRUCT
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
S.MEM.F .EQ 0
|
S.MEM.F .EQ 0
|
||||||
S.MEM.F.AUX .EQ %10000000 Request Stock Object in AUX mem
|
|
||||||
S.MEM.F.INUSE .EQ %10000000 (Internal Flag)
|
S.MEM.F.INUSE .EQ %10000000 (Internal Flag)
|
||||||
S.MEM.F.INIT0 .EQ %01000000 Fill with "0"
|
S.MEM.F.INIT0 .EQ %01000000 Fill with "0"
|
||||||
S.MEM.F.CODE .EQ %00100000
|
S.MEM.F.CODE .EQ %00100000
|
||||||
|
@ -6,7 +6,7 @@ AUTO 4,1
|
|||||||
.LIST ON
|
.LIST ON
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
A2osX.MAIN.S .EQ A2osX.AUX-A2osX.MAIN
|
A2osX.MAIN.S .EQ A2osX.AUX-A2osX.MAIN
|
||||||
A2osX.AUX.S .EQ A2osX.GP-A2osX.AUX
|
A2osX.AUX.S .EQ A2osX.GP-A2osX.AUX
|
||||||
A2osX.GP.S .EQ A2osX.D1-A2osX.GP
|
A2osX.GP.S .EQ A2osX.D1-A2osX.GP
|
||||||
A2osX.D1.S .EQ A2osX.D2-A2osX.D1
|
A2osX.D1.S .EQ A2osX.D2-A2osX.D1
|
||||||
A2osX.D2.S .EQ A2osX.E0-A2osX.D2
|
A2osX.D2.S .EQ A2osX.E0-A2osX.D2
|
||||||
|
@ -143,12 +143,12 @@ K.SYSCALL.JMP .DA 0 $00
|
|||||||
.DA K.GetMem.YA
|
.DA K.GetMem.YA
|
||||||
.DA K.GetMem0.YA
|
.DA K.GetMem0.YA
|
||||||
.DA K.NewStr.YA
|
.DA K.NewStr.YA
|
||||||
.DA K.SListNew
|
|
||||||
*--------------------------------------
|
|
||||||
.DA K.SListGetByID $F0
|
|
||||||
.DA K.SListAdd
|
.DA K.SListAdd
|
||||||
.DA K.SListLookup
|
*--------------------------------------
|
||||||
.DA K.SListUpdate
|
.DA K.SListLookup $F0
|
||||||
|
.DA K.SListGetByID
|
||||||
|
.DA K.SListUpdateByID
|
||||||
|
.DA K.SListNew
|
||||||
.DA K.SListFree.A
|
.DA K.SListFree.A
|
||||||
.DA K.LoadStkObj
|
.DA K.LoadStkObj
|
||||||
.DA K.NewStkObj.YA
|
.DA K.NewStkObj.YA
|
||||||
|
@ -489,269 +489,71 @@ K.NewStr.YA >STYA .1+1
|
|||||||
clc
|
clc
|
||||||
.9 rts
|
.9 rts
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # SListNew
|
* # SListAdd
|
||||||
* ## In:
|
|
||||||
* ## Out:
|
|
||||||
* A=hMem
|
|
||||||
*\--------------------------------------
|
|
||||||
K.SListNew >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
|
|
||||||
*/--------------------------------------
|
|
||||||
* # SListGetByID
|
|
||||||
* ## In:
|
* ## In:
|
||||||
* PUSHB = hSList
|
* PUSHB = hSList
|
||||||
* PUSHW = Key Ptr
|
* PUSHW = Key Ptr
|
||||||
* PUSHW = Data Ptr
|
* PUSHW = Data Ptr
|
||||||
* PUSHW = KeyID
|
|
||||||
* ## Out:
|
* ## Out:
|
||||||
|
* A = Key Length
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
K.SListGetByID >PULLW MEM.IndexOfs
|
K.SListAdd
|
||||||
|
|
||||||
jsr MEM.GetSListParams
|
|
||||||
|
|
||||||
ldy MEM.IndexOfs
|
|
||||||
lda (ZPSListIndex),y
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
jsr K.GetMemPtr.A
|
|
||||||
>STYA ZPSListBlock
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*/--------------------------------------
|
|
||||||
* # SListAdd
|
|
||||||
* ## In:
|
|
||||||
* PUSHB = hSList
|
|
||||||
* PUSHW = Key
|
|
||||||
* PUSHW = Data Ptr
|
|
||||||
* ## Out:
|
|
||||||
* A=hSList
|
|
||||||
*\--------------------------------------
|
|
||||||
K.SListAdd jsr K.SListLookup.I
|
|
||||||
bcc .9 Lookup succeeded...DUP
|
|
||||||
|
|
||||||
sta SETWRITEAUX
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 jsr MEM.GetKeyCharY
|
|
||||||
iny
|
|
||||||
bcc .1
|
|
||||||
|
|
||||||
tya
|
|
||||||
|
|
||||||
jsr MEM.AddBlockByte
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.2 jsr MEM.GetKeyCharY
|
|
||||||
bcs .3
|
|
||||||
|
|
||||||
jsr MEM.AddBlockByte
|
|
||||||
bcs .99
|
|
||||||
iny
|
|
||||||
bra .2
|
|
||||||
|
|
||||||
.3 sta CLRREADAUX
|
|
||||||
lda (ZPSListData)
|
|
||||||
sta SETREADAUX
|
|
||||||
tax
|
|
||||||
|
|
||||||
jsr MEM.AddBlockByte
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
ldy #1
|
|
||||||
|
|
||||||
.4 sta CLRREADAUX
|
|
||||||
lda (ZPSListData),y
|
|
||||||
sta SETREADAUX
|
|
||||||
|
|
||||||
jsr MEM.AddBlockByte
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
clc
|
|
||||||
.HS B0 BCS
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
|
|
||||||
.99 sta CLRWRITEAUX
|
|
||||||
sta CLRREADAUX
|
|
||||||
rts
|
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # SListLookup
|
* # SListLookup
|
||||||
* ## In:
|
* ## In:
|
||||||
* PUSHB = hSList
|
* PUSHB = hSList
|
||||||
* PUSHW = Key
|
* PUSHW = Key Ptr
|
||||||
* PUSHW = Data Ptr
|
* PUSHW = Data Ptr
|
||||||
* ## Out:
|
* ## Out:
|
||||||
* Data Ptr Updated
|
* A = Key Length
|
||||||
|
* X,Y = KeyID
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
K.SListLookup jsr K.SListLookup.I
|
K.SListLookup
|
||||||
bcs .9
|
|
||||||
|
|
||||||
jsr MEM.GetBlockByte
|
|
||||||
tax
|
|
||||||
sta (ZPSListData)
|
|
||||||
|
|
||||||
ldy #0
|
|
||||||
|
|
||||||
.1 jsr MEM.GetBlockByte
|
|
||||||
iny
|
|
||||||
sta (ZPSListData),y
|
|
||||||
dex
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
sta CLRREADAUX
|
|
||||||
clc
|
|
||||||
.9 rts
|
|
||||||
*--------------------------------------
|
|
||||||
K.SListLookup.I jsr MEM.GetSListParams
|
|
||||||
|
|
||||||
lda (ZPSListIndex)
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
jsr K.GetMemPtr.A
|
|
||||||
>STYA ZPSListBlock
|
|
||||||
stz MEM.BlockOfs
|
|
||||||
|
|
||||||
jsr MEM.GetBlockByte
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
tax
|
|
||||||
|
|
||||||
.1 ldy #0
|
|
||||||
|
|
||||||
.2 jsr MEM.GetKeyCharY
|
|
||||||
bcs .4
|
|
||||||
iny
|
|
||||||
sta .3+1
|
|
||||||
|
|
||||||
jsr MEM.GetBlockByte
|
|
||||||
.3 cmp #$ff SELF MODIFIED
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
dex
|
|
||||||
bne .2
|
|
||||||
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.4 jsr MEM.GetBlockByte skip remaining key chars
|
|
||||||
dex
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
jsr MEM.GetBlockByte get Data Len
|
|
||||||
tax
|
|
||||||
|
|
||||||
.5 jsr MEM.GetBlockByte skip data bytes
|
|
||||||
dex
|
|
||||||
bne .5
|
|
||||||
|
|
||||||
tax
|
|
||||||
bne .1
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
rts
|
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # SListUpdate
|
* # SListGetByID
|
||||||
* ## In:
|
* ## In:
|
||||||
* PUSHB = hSList
|
* PUSHB = hSList
|
||||||
* PUSHW = Key
|
* PUSHW = KeyID
|
||||||
|
* PUSHW = Data Ptr (KEY+DATA)
|
||||||
|
* ## Out:
|
||||||
|
* Y,A = Next ID
|
||||||
|
*\--------------------------------------
|
||||||
|
K.SListGetByID
|
||||||
|
*/--------------------------------------
|
||||||
|
* # SListUpdateByID
|
||||||
|
* ## In:
|
||||||
|
* PUSHB = hSList
|
||||||
|
* PUSHW = KeyID
|
||||||
* PUSHW = Data Ptr
|
* PUSHW = Data Ptr
|
||||||
* ## Out:
|
* ## Out:
|
||||||
|
* A = Key Length
|
||||||
|
* X,Y = KeyID
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
K.SListUpdate jsr K.SListLookup.I
|
K.SListUpdateByID
|
||||||
bcs .9
|
*--------------------------------------
|
||||||
|
>PULLW ZPSListData
|
||||||
ldy #0
|
>PULLW ZPSListKey
|
||||||
|
>PULLA
|
||||||
sta CLRREADAUX
|
*/--------------------------------------
|
||||||
lda (ZPSListData)
|
* # SListNew
|
||||||
sta SETREADAUX
|
* ## In:
|
||||||
tax
|
* ## Out:
|
||||||
|
* A=hSList
|
||||||
jsr MEM.SetBlockByte
|
*\--------------------------------------
|
||||||
bcs .99
|
K.SListNew
|
||||||
|
|
||||||
ldy #1
|
|
||||||
|
|
||||||
.4 sta CLRREADAUX
|
|
||||||
lda (ZPSListData),y
|
|
||||||
sta SETREADAUX
|
|
||||||
|
|
||||||
jsr MEM.SetBlockByte
|
|
||||||
bcs .99
|
|
||||||
|
|
||||||
iny
|
|
||||||
dex
|
|
||||||
bne .4
|
|
||||||
|
|
||||||
clc
|
|
||||||
.HS B0 BCS
|
|
||||||
|
|
||||||
.9 sec
|
|
||||||
|
|
||||||
.99 sta CLRWRITEAUX
|
|
||||||
sta CLRREADAUX
|
|
||||||
rts
|
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # SListFree
|
* # SListFree
|
||||||
* ## In:
|
* ## In:
|
||||||
* A=hSList
|
* A=hSList
|
||||||
* ## Out:
|
* ## Out:
|
||||||
*\--------------------------------------
|
*\--------------------------------------
|
||||||
K.SListFree.A sta .8
|
K.SListFree.A
|
||||||
|
|
||||||
sta SETREADAUX
|
|
||||||
sta SETWRITEAUX
|
|
||||||
|
|
||||||
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
|
|
||||||
jsr K.FreeMem.A
|
|
||||||
sta CLRWRITEAUX
|
|
||||||
sta CLRREADAUX
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MEM.GetSListParams
|
MEM.SLIST.JMP sta SETREADAUX
|
||||||
>PULLW ZPSListData
|
sta SETWRITEAUX
|
||||||
>PULLW ZPSListKey
|
jsr X.SLIST
|
||||||
>PULLA
|
sta CLRREADAUX
|
||||||
|
sta CLRWRITEAUX
|
||||||
sta SETREADAUX
|
|
||||||
|
|
||||||
jsr K.GetMemPtr.A
|
|
||||||
>STYA ZPSListIndex
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MEM.GetKeyCharY sta CLRREADAUX
|
MEM.GetKeyCharY sta CLRREADAUX
|
||||||
@ -786,82 +588,17 @@ MEM.GetKeyCharY sta CLRREADAUX
|
|||||||
.9 sec
|
.9 sec
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MEM.GetBlockByte
|
MEM.GetDataByteY
|
||||||
phy
|
sta CLRREADAUX
|
||||||
ldy MEM.BlockOfs
|
lda (ZPSListData),y
|
||||||
lda (ZPSListBlock),y
|
sta SETREADAUX
|
||||||
inc MEM.BlockOfs
|
|
||||||
bne .8
|
|
||||||
|
|
||||||
pha
|
|
||||||
ldy MEM.IndexOfs
|
|
||||||
lda (ZPSListIndex),y
|
|
||||||
beq .9
|
|
||||||
|
|
||||||
jsr K.GetMemPtr.A
|
|
||||||
>STYA ZPSListBlock
|
|
||||||
* stz MEM.BlockOfs
|
|
||||||
|
|
||||||
pla
|
|
||||||
|
|
||||||
.8 ply
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
|
|
||||||
.9 pla
|
|
||||||
ply
|
|
||||||
sec
|
|
||||||
rts
|
rts
|
||||||
*--------------------------------------
|
*--------------------------------------
|
||||||
MEM.AddBlockByte
|
MEM.SetDataByteY
|
||||||
phy
|
sta CLRWRITEAUX
|
||||||
ldy MEM.BlockOfs
|
sta (ZPSListData),y
|
||||||
sta (ZPSListBlock),y
|
sta SETWRITEAUX
|
||||||
inc MEM.BlockOfs
|
|
||||||
bne .8
|
|
||||||
|
|
||||||
inc MEM.IndexOfs
|
|
||||||
|
|
||||||
>LDYAI 256
|
|
||||||
jsr K.GetMem0.YA
|
|
||||||
bcs .9
|
|
||||||
>STYA ZPSListBlock
|
|
||||||
txa
|
|
||||||
ldy MEM.IndexOfs
|
|
||||||
sta (ZPSListIndex),y
|
|
||||||
|
|
||||||
* stz MEM.BlockOfs
|
|
||||||
|
|
||||||
.8 ply
|
|
||||||
clc
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
.9 ply
|
|
||||||
sec
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
MEM.SetBlockByte
|
|
||||||
phy
|
|
||||||
ldy MEM.BlockOfs
|
|
||||||
sta (ZPSListBlock),y
|
|
||||||
inc MEM.BlockOfs
|
|
||||||
bne .8
|
|
||||||
|
|
||||||
inc MEM.IndexOfs
|
|
||||||
|
|
||||||
ldy MEM.IndexOfs
|
|
||||||
lda (ZPSListIndex),y
|
|
||||||
|
|
||||||
jsr K.GetMemPtr.A
|
|
||||||
>STYA ZPSListBlock
|
|
||||||
* stz MEM.BlockOfs
|
|
||||||
|
|
||||||
.8 ply
|
|
||||||
clc
|
|
||||||
rts
|
|
||||||
*--------------------------------------
|
|
||||||
MEM.IndexOfs .BS 1
|
|
||||||
MEM.BlockOfs .BS 1
|
|
||||||
*/--------------------------------------
|
*/--------------------------------------
|
||||||
* # LoadStkObj
|
* # LoadStkObj
|
||||||
* Load a file in AUX memory (Stock Objects)
|
* Load a file in AUX memory (Stock Objects)
|
||||||
|
329
SYS/KERNEL.S.SLIST.txt
Normal file
329
SYS/KERNEL.S.SLIST.txt
Normal file
@ -0,0 +1,329 @@
|
|||||||
|
NEW
|
||||||
|
PREFIX /A2OSX.BUILD
|
||||||
|
AUTO 4,1
|
||||||
|
*--------------------------------------
|
||||||
|
X.SLIST jmp (.1-SLIST.New,x)
|
||||||
|
.1 .DA SLIST.Add
|
||||||
|
.DA SLIST.Lookup
|
||||||
|
.DA SLIST.GetByID
|
||||||
|
.DA SLIST.UpdateByID
|
||||||
|
.DA SLIST.New
|
||||||
|
.DA SLIST.Free.A
|
||||||
|
*--------------------------------------
|
||||||
|
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.Add jsr SLIST.Search
|
||||||
|
bcc .9 Lookup succeeded...DUP
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
.1 jsr MEM.GetKeyCharY
|
||||||
|
iny
|
||||||
|
bcc .1
|
||||||
|
|
||||||
|
sty .8+1
|
||||||
|
tya
|
||||||
|
|
||||||
|
jsr SLIST.AddBlockByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
.2 jsr MEM.GetKeyCharY
|
||||||
|
bcs .3
|
||||||
|
|
||||||
|
jsr SLIST.AddBlockByte
|
||||||
|
bcs .9
|
||||||
|
iny
|
||||||
|
bra .2
|
||||||
|
|
||||||
|
.3 jsr MEM.GetDataByteY
|
||||||
|
tax
|
||||||
|
|
||||||
|
jsr SLIST.AddBlockByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
ldy #1
|
||||||
|
|
||||||
|
.4 jsr MEM.GetDataByteY
|
||||||
|
|
||||||
|
jsr SLIST.AddBlockByte
|
||||||
|
bcs .9
|
||||||
|
|
||||||
|
iny
|
||||||
|
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
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
|
||||||
|
jsr SLIST.GetBlockByte
|
||||||
|
beq .9
|
||||||
|
|
||||||
|
tax
|
||||||
|
|
||||||
|
jsr MEM.SetDataByteY
|
||||||
|
|
||||||
|
.1 iny
|
||||||
|
jsr SLIST.GetBlockByte
|
||||||
|
jsr MEM.SetDataByteY
|
||||||
|
dex
|
||||||
|
bne .1
|
||||||
|
|
||||||
|
jsr MEM.SetDataByteY
|
||||||
|
tax
|
||||||
|
jsr MEM.SetDataByteY
|
||||||
|
|
||||||
|
.2 iny
|
||||||
|
jsr SLIST.GetBlockByte
|
||||||
|
jsr MEM.SetDataByteY
|
||||||
|
dex
|
||||||
|
bne .2
|
||||||
|
|
||||||
|
>LDYA ZPSListKey
|
||||||
|
|
||||||
|
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
|
||||||
|
*--------------------------------------
|
||||||
|
SLIST.Free.A sta .8
|
||||||
|
|
||||||
|
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
|
||||||
|
lda (ZPSListIndex),y
|
||||||
|
|
||||||
|
sta SLIST.IndexOfs
|
||||||
|
|
||||||
|
jsr K.GetMemPtr.A
|
||||||
|
>STYA ZPSListBlock
|
||||||
|
|
||||||
|
lda ZPSListKey+1
|
||||||
|
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
|
@ -22,6 +22,7 @@ A2osX.MAIN .PH $1100
|
|||||||
.EP
|
.EP
|
||||||
A2osX.AUX .PH $0C00
|
A2osX.AUX .PH $0C00
|
||||||
.INB /A2OSX.SRC/SYS/KERNEL.S.OSD
|
.INB /A2OSX.SRC/SYS/KERNEL.S.OSD
|
||||||
|
.INB /A2OSX.SRC/SYS/KERNEL.S.SLIST
|
||||||
.EP
|
.EP
|
||||||
A2osX.GP .PH $BD00
|
A2osX.GP .PH $BD00
|
||||||
.INB /A2OSX.SRC/SYS/KERNEL.S.GP
|
.INB /A2OSX.SRC/SYS/KERNEL.S.GP
|
||||||
|
Loading…
Reference in New Issue
Block a user