Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-03-06 17:20:29 +01:00
parent 6d0fdcc345
commit a2cb686ead
9 changed files with 154 additions and 100 deletions

Binary file not shown.

View File

@ -73,6 +73,8 @@ DIR.AZ jsr DIR.AS
DIR.BS jsr SRC.GetNextCharNB
bcs .98
jsr EXP.ResetAcc
jsr EXP.Eval
bcs .9
@ -98,8 +100,11 @@ DIR.BS jsr SRC.GetNextCharNB
cmp #','
bne .98
jsr EXP.ResetAcc
jsr EXP.Eval
bcs .9
lda SRC.ACC+3
ora SRC.ACC+2
ora SRC.ACC+1
@ -132,11 +137,14 @@ DIR.BS jsr SRC.GetNextCharNB
DIR.DA jsr SRC.GetNextCharNB
bcs .98
.1 jsr EXP.Eval
.1 jsr EXP.ResetAcc
jsr EXP.Eval
bcs .9
ldy #0
ldx SRC.ACC.SIZE
.2 lda SRC.ACC,y
jsr OUT.EmitByte
bcs .9
@ -172,6 +180,8 @@ DIR.DO >LDA.G ASM.DO.StackPtr
jsr SRC.GetNextCharNB
bcs .99
jsr EXP.ResetAcc
jsr EXP.Eval
bcs .99
@ -267,32 +277,31 @@ DIR.SE sec
DIR.EQ clc
>LDA.G SYM.BufPtr
beq .99
beq .9
eor #SYMG
beq .1
bcs .99 .SE not allowed in local/private
bcs .9 .SE not allowed in local/private
bcc .10 in local, skip F update
.1 ror A = 0 : SYMG.F.RW
ora #SYMG.F.EQU
tsb SRC.ACC.F
sta SRC.ACC.F
.10 jsr SRC.GetNextCharNB
bcs .99
bcs .9
lda #$ff
>STA.G OUT.bEquate
jsr EXP.ResetAcc
jsr EXP.Eval
bcs .9
>LDA.G ASM.PASS
bne .2
*---------------------------------------
>LDA.G SYM.BufPtr PASS#1
>LDA.G SYM.BufPtr
cmp #SYMG
beq .12
@ -310,30 +319,13 @@ DIR.EQ clc
rts
.12 jsr SYM.Acc2Global global, update and close
>LDA.G ASM.PASS
bne .2
jmp SYM.StoreGlobal
*---------------------------------------
.2 >LDA.G SYM.BufPtr PASS#2
cmp #SYMG
beq .22
tay
ldx #3 we are in local/private
.21 lda SRC.ACC,x update value
dey
sta (ZPSymbolBuf),y
dex
bpl .21
.2 jmp SYM.UpdateGlobal
clc
rts
.22 jsr SYM.Acc2Global global, update and close
jmp SYM.UpdateGlobal
.99 lda #E.SYNTAX.ERROR
sec
.9 rts
*---------------------------------------
DIR.FI >LDA.G ASM.DO.StackPtr
@ -525,6 +517,8 @@ DIR.OP.SYNERR lda #E.SYNTAX.ERROR
DIR.OR jsr SRC.GetNextCharNB
bcs DIR.OP.SYNERR
jsr EXP.ResetAcc
jsr EXP.Eval
bcs .9

View File

@ -23,8 +23,6 @@ EXP.Eval >STZ.G EXP.Modifier
>STZ.G EXP.Prefix
>STZ.G EXP.Operator
stz SRC.ACC.SIZE
jsr SRC.GetChar
bcs EXP.Eval.Missing
@ -39,9 +37,7 @@ EXP.Eval >STZ.G EXP.Modifier
EXP.Eval.Next0 jsr SRC.GetNextChar
EXP.Eval.Next stz SRC.ACC.F
stz SRC.ACC
EXP.Eval.Next stz SRC.ACC
stz SRC.ACC+1
stz SRC.ACC+2
stz SRC.ACC+3
@ -92,14 +88,14 @@ EXP.Eval.Next stz SRC.ACC.F
jsr SRC.GetHex
bcs EXP.EvalExitRTS
bra EXP.EvalOperator
jmp EXP.EvalOperator
.2 cmp #'%' binary?
bne .3
jsr SRC.GetBinary
bcs EXP.EvalExitRTS
bra EXP.EvalOperator
jmp EXP.EvalOperator
.3 cmp #'&' octal?
bne .4
@ -133,10 +129,12 @@ EXP.Eval.Next stz SRC.ACC.F
jsr SRC.GetNextChar
bcs EXP.EvalExitSYN
ora #$80
jsr EXP.SetAccA
jsr SRC.GetNextChar
bcs EXP.EvalOperator
cmp #'"'
beq .45
@ -152,17 +150,21 @@ EXP.Eval.Next stz SRC.ACC.F
jsr SYM.LookupGlobal
bcc EXP.EvalOperator
rts
EXP.EvalExitRTS rts
EXP.EvalExitOK >LDA.G EXP.Modifier
beq .8
beq .1
asl
tax
lda #SYMG.F.FWREF
trb SRC.ACC.F
jmp (J.EXP.MOD-2,x)
.8 clc
EXP.EvalExitRTS rts
.1 clc
rts
EXP.EvalExitSYN lda #E.SYNTAX.ERROR
sec
@ -173,7 +175,7 @@ EXP.EvalExitUND lda #E.UNDEF.SYMBOL
rts
*---------------------------------------
EXP.EvalOperator
jsr EXP.SetACCSize
* jsr EXP.SetACCSize
>LDA.G EXP.Operator
beq .7
@ -228,18 +230,17 @@ EXP.GetLocal jsr SRC.GetNextChar
lda #SYMG.F.FWREF
tsb SRC.ACC.F
lda #2
sta SYMG.SIZE
clc
rts
.9 lda #E.SYNTAX.ERROR
sec
rts
.8 lda #SYMG.F.FWREF
trb SRC.ACC.F
clc
rts
.8 rts
*---------------------------------------
EXP.MOD.8.3 lda SRC.ACC+2
bra EXP.MOD.8
@ -317,11 +318,7 @@ EXP.OP.EQU ldx #0 ARG-ACC->ACC
.2 lda #0
rol
sta SRC.ACC
lda #1
sta SRC.ACC.SIZE
.9 rts
jmp EXP.SetAccA
*---------------------------------------
EXP.OP.GRT jsr EXP.OP.SUB
@ -382,6 +379,17 @@ EXP.OP.DIV >PUSHL SRC.ARG
clc
rts
*---------------------------------------
EXP.ResetAcc stz SRC.ACC.F
lda #2
sta SRC.ACC.SIZE
stz SRC.ACC
stz SRC.ACC+1
stz SRC.ACC+2
stz SRC.ACC+3
rts
*---------------------------------------
EXP.SetAccA sta SRC.ACC
stz SRC.ACC+1
stz SRC.ACC+2
@ -394,17 +402,27 @@ EXP.SetAccA sta SRC.ACC
EXP.SetACCSize lda SRC.ACC.SIZE
bne .8
ldx #4
>LDA.G ASM.PASS
bne .1
lda SRC.ACC.F
and #SYMG.F.FWREF
beq .1
ldx #2
bra .7
.1 ldx #4
.1 lda SRC.ACC-1,x
bne .2
.2 lda SRC.ACC-1,x
bne .7
dex
bne .1
bne .2
inx
.2 stx SRC.ACC.SIZE
.7 stx SRC.ACC.SIZE
.8 rts
*---------------------------------------
MAN

View File

@ -231,7 +231,9 @@ SRC.ParseLine.AM
bra .74
.6 jsr EXP.Eval
.6 jsr EXP.ResetAcc
jsr EXP.Eval
bcs .99
>LDA.G EXP.Prefix
@ -239,13 +241,10 @@ SRC.ParseLine.AM
jsr SRC.AddToBuf
.75 ldx #2 FWREF ...assume 2 bytes...
lda SRC.ACC.F
and #SYMG.F.FWREF
bne .72
ldx SRC.ACC.SIZE
beq * SHOULD NEVER APPEND
.75 ldx SRC.ACC.SIZE
beq * SHOULD NEVER APPEND
jsr SRC.GetACCSize
.72 lda #'a'
@ -449,7 +448,7 @@ SRC.ParseLine.Emit
.8 clc
.9 rts
.90 lda #E.INV.T.FILE
.90 lda #E.INV.CPU.FILE
sec
rts
@ -1018,6 +1017,26 @@ SRC.ACC10 lda SRC.ACC ACC*2-> ACC & ACCTMP
sta SRC.ACC+3 CS if overflow
.9 rts
*---------------------------------------
SRC.GetACCSize lda SRC.ACC.F
and #SYMG.F.FWREF
beq .1
ldx #2
rts
.1 ldx SRC.ACC.SIZE
.2 lda SRC.ACC-1,x
bne .8
dex
bne .2
inx
.8 rts
*---------------------------------------
SRC.DoCheck sec
>LDA.G ASM.DO.StackPtr
beq .8

View File

@ -80,12 +80,14 @@ SYM.NewGlobal >LDA.G ASM.PASS
.9 lda #E.SYMBOL.REDEF
sec
.99 rts
.99
SYM.NewGlobal.RTS
rts
*---------------------------------------
SYM.NewGlobal2 >PUSHB.G SYM.hList Pass #2: should be already defined...
>PUSHW ZPLinePtr
>SYSCALL SListLookup
bcs .9
bcs SYM.NewGlobal.RTS
>STYA.G SYM.ID
@ -104,13 +106,31 @@ SYM.NewGlobal2 >PUSHB.G SYM.hList Pass #2: should be already defined...
>SYSCALL SListGetData
bcs .99
lda #SYMG
* lda (ZPSymbolBuf)
* and #SYMG.F.EQU
* bne .8
* >LDA.G ASM.PC
* ldy #SYMG.V
* cmp (ZPSymbolBuf),y
* bne .7
* >LDA.G ASM.PC+1
* ldy #SYMG.V+1
* cmp (ZPSymbolBuf),y
* beq .8
*.7 lda #E.OUT.OF.SYNC
* sec
* rts
.8 lda #SYMG
>STA.G SYM.BufPtr
>STZ.G MAC.CtxID
>STA.G MAC.CtxNextID
* clc
clc
rts
.9 lda #E.UNDEF.SYMBOL
@ -147,9 +167,6 @@ SYM.LookupGlobal
dey
bpl .2
lda #SYMG.F.FWREF
trb SRC.ACC.F
clc
rts
@ -166,11 +183,9 @@ SYM.LookupGlobal
lda #SYMG.F.FWREF
tsb SRC.ACC.F
lda #$ff
sta SRC.ACC
sta SRC.ACC+1 setup ACC=$FFFF to reserve 2 bytes in AM
lda #2
sta SYMG.SIZE
.5 jsr SRC.GetNextChar
bcs .8
@ -276,8 +291,9 @@ SYM.NewLocalA tax Save Local ID
bcc .9 Already Defined
>LDA.G SYM.BufPtr
cmp #252 6*42
beq .90
* sec
adc #SYML
bcs .90
ldy #ASM.PC+4

View File

@ -87,9 +87,10 @@ E.MACRO.TOO.BIG .EQ $B4
E.MACRO.INV .EQ $B5
E.MACRO.TOO.MANY .EQ $B6
*
E.OUT.OF.SYNC .EQ $B8
E.INV.SYM .EQ $B9
E.INV.ARGS .EQ $BA
E.INV.T.FILE .EQ $BC
E.INV.CPU.FILE .EQ $BC
E.SRC.INV.TYPE .EQ $BD
E.SRC.TOO.MANY.IN .EQ $BE
E.SRC.UNEXP.EOF .EQ $BF

View File

@ -341,7 +341,7 @@ CS.RUN.PRINTMEMX
lda #'-'
bcc .30
lda MSG.FLAGS,x
lda MSG.FLAGSX,x
.30 sta (pData),y
pla
@ -377,11 +377,11 @@ CS.RUN.PRINTMEMX
ldy #S.MEM.F
jsr ZPReadAux Get flags
bpl .12
txa
jsr CS.RUN.CHECKPS
bcc .12
>PUSHW L.MSG1.INV
>PUSHBI 0
>SYSCALL PrintF
@ -396,7 +396,7 @@ CS.RUN.CHECKPS ldx #0
beq .8
inx
cpx K.PS.MAX
cpx #K.PS.MAX
bne .1
rts CS
@ -430,6 +430,7 @@ MSG3 .AS "High Memory: $%H\r\n"
.AS "Low Memory: $%H\r\n"
.AZ "\r\nFree Memory: %D Bytes.\r\n\r\n"
MSG.FLAGS .AS "UZXAfcds"
MSG.FLAGSX .AS "UZXAidep"
*--------------------------------------
.DUMMY
.OR 0

View File

@ -366,8 +366,9 @@ K.FreeMem tay
bne .8 no, must be a code segment loaded several times
lda (ZPMemMgrSPtr)
and #S.MEM.F.CODE CS: Any BINPATH to discard ?
and #$7f keep flags for memdump
sta (ZPMemMgrSPtr) Mark as FREE
and #S.MEM.F.CODE CS: Any BINPATH to discard ?
beq .1
ldy #S.MEM.BIN

View File

@ -118,8 +118,6 @@ SLISTX.SListAddData
jsr SLIST.Select
jsr SLIST.SkipKey
* >LDYA SLIST.KeyID Save DataLen location
* >STYA SLIST.KeyID.Save to update later
ldy SLIST.BytePtr
lda (ZPSListDBlkPtr),y
@ -149,13 +147,21 @@ SLISTX.SListAddData
eor #$ff
sta ZPSListDataLen+1
sec
.1 inc ZPSListDataLen
bne .2
inc ZPSListDataLen+1
beq .8
.2 jsr SHARED.FORPNT.GetNext
jsr SLIST.AddDataByte
bcc .3
jsr SLIST.SetBlockByte override ending 0, already allocated
clc
bra .1
.3 jsr SLIST.AddDataByte
bcc .1
rts
@ -180,10 +186,13 @@ SLISTX.SListSetData
txa
eor #$ff
sta SLIST.nDataCnt+1
.1 inc SLIST.nDataCnt
bne .2
inc SLIST.nDataCnt+1
beq .8
.2 jsr SHARED.FORPNT.GetNext
jsr SLIST.SetBlockByte
bra .1
@ -234,8 +243,7 @@ SLISTX.SListNewKey
>STYA SLIST.KeyID.Save End of list
lda SLIST.KeyLen
jsr SLIST.AddDataByte
bcs .9
jsr SLIST.SetBlockByte override ending 0, already allocated
ldy #0
@ -247,15 +255,15 @@ SLISTX.SListNewKey
cpy SLIST.KeyLen
bne .1
lda #0 Data Len = 0
lda #0 Data Len lo = 0
jsr SLIST.AddDataByte
bcs .9
lda #0
lda #0 Data Len hi = 0
jsr SLIST.AddDataByte
bcs .9
lda #0 Next Len = 0
lda #0 Ending Len = 0
jsr SLIST.AddDataByte
bcs .9
@ -460,10 +468,6 @@ SLIST.AddDataByte
txa
inc SLIST.BlockPtr
ldy SLIST.BlockPtr
cpy #$4A
bcc .55
>DEBUG
.55
sta (ZPSListIBlkPtr),y
* stz SLIST.BytePtr