Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-03-02 07:53:19 +01:00
parent bebf9f1712
commit f8dd42b0d6
8 changed files with 209 additions and 112 deletions

Binary file not shown.

View File

@ -1,10 +1,10 @@
NEW
AUTO 3,1
*---------------------------------------
DIR.Reset lda #$80
DIR.Reset lda #$ff
>STA.G ASM.LI.ON
>STZ.G ASM.LI.CON
iny #ASM.LI.CON
sta (pData),y
iny #ASM.LI.MON
sta (pData),y
iny #ASM.LI.XON
@ -131,8 +131,10 @@ DIR.BS jsr SRC.GetNextCharNB
*---------------------------------------
DIR.DA jsr SRC.GetNextCharNB
bcs .98
.1 jsr EXP.Eval
bcs .9
ldx SRC.ACC.SIZE
bne .10
@ -147,8 +149,10 @@ DIR.DA jsr SRC.GetNextCharNB
bne .2
.3 jsr SRC.GetNextChar
bcs .8
cmp #' '
cmp #C.SPACE
beq .8
cmp #','
bne .98
jsr SRC.GetNextChar
@ -367,7 +371,7 @@ DIR.HS jsr SRC.GetNextCharNB
bcs .9
jsr SRC.GetNextChar
bcs .8
cmp #' '
cmp #C.SPACE
beq .8
jsr SRC.IsDigit16
bcc .1
@ -408,11 +412,14 @@ DIR.LI jsr SRC.GetNextChar
bcs .8
cmp #','
beq DIR.LI
cmp #' '
cmp #C.SPACE
beq .8
.9 lda #E.SYNTAX.ERROR
sec
rts
.7 jmp (J.LI,x)
.8 clc

View File

@ -55,10 +55,11 @@ EXP.Eval.Next stz SRC.ACC.F
>LDA.G MAC.StkPtr
beq .9 illegal OUTSIDE macro
.13 jsr EXP.GetLocal
bcs .19
* jsr OUT.DEBUG
jmp EXP.EvalOperator
.19 rts
@ -66,11 +67,7 @@ EXP.Eval.Next stz SRC.ACC.F
.14 cmp #'*'
bne .10
* >LDA.G ASM.PASS
* beq .55
* >DEBUG
*.55 jsr SYM.PC2Acc
jsr SYM.PC2Acc
jsr SRC.GetNextChar
jmp EXP.EvalOperator
@ -146,9 +143,9 @@ EXP.Eval.Next stz SRC.ACC.F
.42 jsr SRC.IsLetter Symbol ?
bcs EXP.EvalExitSYN
jsr EXP.GetGlobal
bcs EXP.EvalExitUND
bra EXP.EvalOperator
jsr SYM.LookupGlobal
bcc EXP.EvalOperator
rts
EXP.EvalExitOK >LDA.G EXP.Modifier
beq .8
@ -170,8 +167,22 @@ EXP.EvalExitUND lda #E.UNDEF.SYMBOL
EXP.EvalOperator
>LDA.G EXP.Operator
beq .7
* pha
* phx
* phy
* tax
* lda SRC.EXP.RESERVED,x
* >SYSCALL putchar
* jsr OUT.DEBUG
* ply
* plx
* pla
jsr EXP.Compute
bcs EXP.EvalExitRTS
.7 jsr SRC.GetChar
bcs EXP.EvalExitOK
@ -183,13 +194,17 @@ EXP.EvalOperator
jsr SRC.IsEXPReserved
bcs EXP.EvalExitSYN
txa
>STA.G EXP.Operator
ldx #4
.8 lda SRC.ACC.SIZE,x
sta SRC.ARG.SIZE,x
dex
bpl .8
jmp EXP.Eval.Next0
*---------------------------------------
EXP.GetLocal jsr SRC.GetNextChar
@ -205,9 +220,8 @@ EXP.GetLocal jsr SRC.GetNextChar
>LDA.G ASM.PASS pass#2?
bne EXP.EvalExitUND
lda #SYMG.F.FWREF Mark ACC as pending
sta SRC.ACC.F
stz SRC.ACC.SIZE
stz SRC.ACC.SIZE Mark ACC as undefined
clc
rts
@ -215,37 +229,23 @@ EXP.GetLocal jsr SRC.GetNextChar
sec
.8 rts
*---------------------------------------
EXP.GetGlobal jsr SYM.LookupGlobal
bcc .8
>LDA.G ASM.PASS pass#2?
bne EXP.EvalExitUND yes, undefined symbol
lda #SYMG.F.FWREF
sta SRC.ACC.F Mark ACC as pending
stz SRC.ACC.SIZE
.1 jsr SRC.GetNextChar
bcs .8
jsr SRC.IsLetterOrDigit
bcc .1
cmp #'.'
beq .1
cmp #'_'
beq .1
.8 clc
rts
*---------------------------------------
EXP.MOD.8.3 lda SRC.ACC+2
bra EXP.MOD.8
EXP.MOD.8.2 lda SRC.ACC+1
EXP.MOD.8 sta SRC.ACC
EXP.MOD.8.1 lda #1
sta SRC.ACC.SIZE
clc
rts
EXP.MOD.24 lda #3
sta SRC.ACC.SIZE
clc
rts
EXP.MOD.32 lda #4
sta SRC.ACC.SIZE
clc
@ -253,19 +253,22 @@ EXP.MOD.32 lda #4
*---------------------------------------
EXP.Compute ldx SRC.ACC.SIZE
beq .1
ldx SRC.ARG.SIZE
beq .1
asl
tax
jmp (J.EXP.OP-2,x)
.1 >LDA.G ASM.PASS
beq .8
lda #E.UNDEF.SYMBOL
sec
rts
.8 lda #SYMG.F.FWREF Mark ACC as pending
tsb SRC.ACC.F
stz SRC.ACC.SIZE
.8 stz SRC.ACC.SIZE Mark ACC as undefined
clc
rts
*---------------------------------------
@ -332,24 +335,20 @@ EXP.OP.ADD ldx #0 ARG-ACC->ACC
ldy #4
clc
.1 lda SRC.ARG,x
adc SRC.ACC,x
sta SRC.ACC,x
inx
dey
bne .1
bcc .8
lda #E.VAL.TOO.BIG
.8 rts
*---------------------------------------
EXP.OP.SUB >LDA.G ASM.PASS
beq .55
* jsr SYM.Dump.LP
* >DEBUG
.55 ldx #0 ARG-ACC->ACC
EXP.OP.SUB ldx #0 ARG-ACC->ACC
ldy #4
sec
@ -360,7 +359,9 @@ EXP.OP.SUB >LDA.G ASM.PASS
inx
dey
bne .1
bcs .8
lda #E.VAL.TOO.BIG
sec
rts

View File

@ -32,8 +32,6 @@ MAC.Init >SYSCALL SListNew
.9 rts
*---------------------------------------
MAC.Reset >STZ.G MAC.StkPtr
>STA.G MAC.CtxID
>STA.G MAC.CtxNextID
rts
*---------------------------------------
MAC.Quit >LDA.G MAC.StkPtr

View File

@ -295,6 +295,43 @@ OUT.PrintCR1 >DEC.G OUT.LineCnt
* >STA.G bPause
.8 rts
*---------------------------------------
OUT.DEBUG phy
phx
>PUSHW L.MSG.DEBUG
ldy #ASM.PC+4
.1 dey
lda (pData),y
>PUSHA
cpy #ASM.PC
bne .1
ldy #5
.2 lda SRC.ACC.F,y
>PUSHA
dey
bpl .2
ldy #4
.3 lda SRC.ARG.SIZE,y
>PUSHA
dey
bpl .3
>PUSHBI 15
>SYSCALL PrintF
plx
ply
rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.OUT
LOAD USR/SRC/BIN/ASM.S

View File

@ -68,7 +68,7 @@ SRC.ParseLine.LABEL
bcs SRC.ParseLine.RTS
bra SRC.ParseLine.DirOp
.8 jsr SYM.NewOrGetGlobal
.8 jsr SYM.NewGlobal
bcs SRC.ParseLine.RTS
*---------------------------------------
SRC.ParseLine.DirOp
@ -336,6 +336,7 @@ SRC.ParseLine.Emit
.4 lda (ZPOpDefPtr),y
cmp #'a
bcs .5 lowercase, go compute address
jsr SRC.IsDigit16
asl
asl
@ -357,7 +358,9 @@ SRC.ParseLine.Emit
clc
rts
.5 bne .6 cmp #'a'....
ldx SRC.ACCTMP
inc SRC.ACCTMP
lda SRC.ACC,x
@ -365,11 +368,14 @@ SRC.ParseLine.Emit
.6 cmp #'r
bne .7
lda SRC.ACC.SIZE
beq .50 Emit 00 if pending symbol (pass #1)
jsr SRC.ComputeRel8
bcs .91
bra .50
.7 cmp #'l
bne .90
@ -479,6 +485,8 @@ SRC.ComputeRel16
*---------------------------------------
SRC.ComputeRel phy
jsr OUT.DEBUG
ldy #ASM.PC
clc
lda SRC.ACC
@ -496,6 +504,10 @@ SRC.ComputeRel phy
lda SRC.ACC+3
sbc (pData),y
sta SRC.ACC+3
php
jsr OUT.DEBUG
plp
ply
rts
*---------------------------------------

View File

@ -40,20 +40,24 @@ SYM.Quit >LDA.G SYM.hGlobalBuf
.8 rts
*---------------------------------------
SYM.NewOrGetGlobal
>LDA.G ASM.PASS
bne SYM.GetGlobal
SYM.NewGlobal >LDA.G ASM.PASS
bne SYM.NewGlobal2
SYM.NewGlobal jsr SYM.StoreGlobal
jsr SYM.StoreGlobal Store previous if any
bcs .99
>STZ.G MAC.CtxID
>STA.G MAC.CtxNextID
>PUSHB.G SYM.hList
>PUSHW ZPLinePtr Pass #1: try to add global...
>SYSCALL SListNewKey
bcs .9 Already Defined
>STYA.G SYM.GlobalID
txa
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
@ -78,19 +82,21 @@ SYM.NewGlobal jsr SYM.StoreGlobal
sec
.99 rts
*---------------------------------------
SYM.GetGlobal >PUSHB.G SYM.hList
>PUSHW ZPLinePtr Pass #2: should be already defined...
SYM.NewGlobal2 >PUSHB.G SYM.hList Pass #2: should be already defined...
>PUSHW ZPLinePtr
>SYSCALL SListLookup
bcs .9
>STYA.G SYM.GlobalID
txa
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >PUSHB.G SYM.hList
.1 >PUSHB.G SYM.hList Pass #2: Retore full context
>PUSHW.G SYM.GlobalID
>PUSHW ZPSymbolBuf
>PUSHWI $ffff all
@ -100,6 +106,10 @@ SYM.GetGlobal >PUSHB.G SYM.hList
lda #$ff
>STA.G SYM.bInGlobal
>STZ.G MAC.CtxID
>STA.G MAC.CtxNextID
* clc
rts
@ -111,42 +121,45 @@ SYM.LookupGlobal
>PUSHB.G SYM.hList
>PUSHW ZPLinePtr
>SYSCALL SListLookup
bcs .9
bcs .4
>STYA ZPPtr1
txa
* clc
adc ZPLinePtr
sta ZPLinePtr
bcc .1
inc ZPLinePtr+1
.1 >LDA.G SYM.GlobalID
cmp ZPPtr1
bne .3
iny SYM.GlobalID+1
lda (pData),y
cmp ZPPtr1+1
bne .3
ldy #SYMG-1
.2 lda (ZPSymbolBuf),y
sta SRC.ACC.F,y
dey
bpl .2
clc
rts
.3 >PUSHB.G SYM.hList
.1 >PUSHB.G SYM.hList
>PUSHW ZPPtr1
>PUSHW L.SRC.ACC.F
>PUSHWI SYMG Get only Global value
>PUSHWZ Start
>SYSCALL SListGetData
rts
.4 >LDA.G ASM.PASS pass#2?
bne .9 yes, undefined symbol
stz SRC.ACC.SIZE Mark ACC as undefined
.5 jsr SRC.GetNextChar
bcs .8
jsr SRC.IsLetterOrDigit
bcc .5
cmp #'.'
beq .5
cmp #'_'
beq .5
.8 clc
rts
.9 lda #E.UNDEF.SYMBOL
sec
rts
@ -177,7 +190,6 @@ SYM.StoreGlobal >LDA.G ASM.PASS
bcs .9
>STZ.G SYM.bInGlobal
>STA.G MAC.CtxID
.8 clc
.9 rts
@ -231,9 +243,9 @@ SYM.NewLocalA tax Save Local ID
bpl .91
>LDA.G ASM.PASS
bne SYM.LookupLocalX Pass #2: check if defined
bne .20
*---------------------------------------
jsr SYM.LookupLocalX Pass #1; try to add
jsr SYM.LookupLocalX Pass #1: try to add
bcc .9 Already Defined
>LDA.G SYM.GlobalPtr
@ -291,6 +303,12 @@ SYM.NewLocalA tax Save Local ID
sec
rts
*---------------------------------------
.20 jsr SYM.LookupLocalX Pass #2: check if defined
bcs .9
>STA.G SYM.GlobalPtr
rts
*---------------------------------------
SYM.LookupLocalX
lda (ZPSymbolBuf)
and #SYMG.F.LOCALS
@ -328,7 +346,11 @@ SYM.LookupLocalX
lda #2
sta SRC.ACC.SIZE
ply
pla
iny point to 0 after local
tya
clc
rts
@ -352,18 +374,21 @@ SYM.Dump.8 clc
rts
*---------------------------------------
SYM.Dump >LDA.G bListAll
bmi .10
bmi SYM.Dump.1
>LDA.G ASM.LI.ON
bpl SYM.Dump.8
.10 >LDYA L.MSG.SYMBOLS
SYM.Dump.1 >LDYA L.MSG.SYMBOLS
>SYSCALL PutS
stz ZPPtr2
stz ZPPtr2+1
.1 >LDYA ZPPtr2
.1
* jsr SYM.Dump.DBG
>LDYA ZPPtr2
>STYA ZPPtr1
>PUSHB.G SYM.hList
@ -382,7 +407,34 @@ SYM.Dump >LDA.G bListAll
>SYSCALL SListGetData
bcs .9
ldy #SYMG.SIZE Get Symbol Size
jsr SYM.Dump.G
bcs .9
ldx #5
lda (ZPSymbolBuf)
bit #SYMG.F.LOCALS
beq .2
jsr SYM.Dump.LP
bcs .9
.2 cpx #5 already CR printed ?
beq .8
jsr OUT.PrintCR
.8 jmp .1
.9 rts
*---------------------------------------
SYM.Dump.DBG >PUSHW L.MSG.WORD
>PUSHW ZPPtr2
>PUSHBI 2
>SYSCALL printf
rts
*---------------------------------------
SYM.Dump.G ldy #SYMG.SIZE Get Symbol Size
lda (ZPSymbolBuf),y
pha
@ -413,19 +465,9 @@ SYM.Dump >LDA.G bListAll
>SYSCALL PrintF
>PUSHW ZPTmpBuf Label
>PUSHBI 0
>SYSCALL PrintF
lda (ZPSymbolBuf)
bit #SYMG.F.LOCALS
beq .7
jsr SYM.Dump.LP
.7 jsr OUT.PrintCR
jmp .1
.9 rts
>LDYA ZPTmpBuf Label
>SYSCALL PutS
rts
*---------------------------------------
SYM.Dump.LP ldy #SYMG

View File

@ -44,9 +44,8 @@ ZS.END .ED
* Symbols
*---------------------------------------
SYMG.F .EQ 0
SYMG.F.FWREF .EQ %10000000
SYMG.F.RW .EQ %01000000
SYMG.F.LOCALS .EQ %00100000
SYMG.F.RW .EQ %10000000
SYMG.F.LOCALS .EQ %01000000
SYMG.SIZE .EQ 1 1,2,3,4
SYMG.V .EQ 2 DWORD
*
@ -113,6 +112,7 @@ CS.START cld
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.HELP .DA MSG.HELP
L.MSG.CRLF .DA MSG.CRLF
L.MSG.OUT0 .DA MSG.OUT0
.DA MSG.OUT1
.DA MSG.OUT2
@ -130,9 +130,8 @@ L.MSG.LSYMBOL .DA MSG.LSYMBOL
L.MSG.PSYMBOL .DA MSG.PSYMBOL
L.MSG.SUMMARY .DA MSG.SUMMARY
L.MSG.END .DA MSG.END
L.MSG.CRLF .DA MSG.CRLF
L.MSG.DEBUG .DA MSG.DEBUG
L.MSG.WORD .DA MSG.WORD
L.MSG.ACC .DA MSG.ACC
L.MSG.SRC.FILE .DA MSG.SRC.FILE
L.MSG.OBJ.FILE .DA MSG.OBJ.FILE
L.MSG.T.FILE .DA MSG.T.FILE
@ -397,7 +396,8 @@ CS.RUN ldy #S.PS.hStdIn
.9 pha
jsr OUT.PrintLineErr
* jsr SYM.Dump
jsr SYM.StoreGlobal Make sure last Global flushed
* jsr SYM.Dump.1
pla
sec
rts
@ -512,7 +512,8 @@ ASM.6502 .AZ "6502"
MSG.HELP .AS "A2osX-Macro Assembler (S-C MASM 3.0 Based)\r\n"
.AS "Usage : ASM <src file> [type TXT ($04) or S-C/BAS ($FA)]\r\n"
.AS " -L : Override .LIST (C,M,X)OFF\r\n"
.AZ " -T <target file> : Override .TF directive\r\n"
.AS " -T <target file> : Override .TF directive"
MSG.CRLF .AZ "\r\n"
MSG.PASS .AZ "**** Pass:#%d ****"
MSG.SRC.FILE .AZ "**** Reading SRC File:%s"
MSG.OBJ.FILE .AZ "**** Writing OBJ File:%s, Type=%02x"
@ -533,9 +534,8 @@ MSG.LSYMBOL .AZ " .%d=%h%h%h%h"
MSG.PSYMBOL .AZ " :%d(%d)=%h%h%h%h"
MSG.SUMMARY .AZ "\r\nSymbol Table Size : %5D Bytes.\r\n"
MSG.END .AZ "**** End Of Assembly."
MSG.CRLF .AZ "\r\n"
MSG.WORD .AZ ">$%H"
MSG.ACC .AZ "%b,%d,%h%h%h%h\r\n"
MSG.DEBUG .AZ "PC=%h%h%h%h, ACC=%h%h%h%h [%h] F:%b ARG=%h%h%h%h [%h]\r\n"
MSG.WORD .AZ "ID:%H "
*---------------------------------------
ASM.CPU.FILE .BS 65