Kernel 0.94

This commit is contained in:
Rémy GIBERT 2020-02-25 17:42:22 +01:00
parent ba956a2bf9
commit 28dac6c780
9 changed files with 178 additions and 142 deletions

Binary file not shown.

View File

@ -189,6 +189,7 @@ DIR.DU >LDA.G ASM.DU.ON
jsr DIR.SavePC
clc
rts
DIR.DU.ERR lda #E.ILLEGAL.DIR
sec
rts
@ -204,9 +205,6 @@ DIR.ED >LDA.G ASM.DU.ON
clc
rts
.9 lda #E.ILLEGAL.DIR
sec
rts
*---------------------------------------
DIR.EL >LDA.G ASM.DO.StackPtr
beq .9
@ -242,6 +240,7 @@ DIR.EP >LDA.G ASM.PH.ON
jsr DIR.RestorePC
clc
rts
.9 lda #E.ILLEGAL.DIR
sec
rts
@ -445,6 +444,7 @@ DIR.OP jsr SRC.GetNextCharNB
>LDYA ZPLinePtr
jmp FIO.LOAD.CPU
DIR.OP.SYNERR lda #E.SYNTAX.ERROR
sec
rts
@ -469,12 +469,14 @@ DIR.PG clc
*---------------------------------------
DIR.PH >LDA.G ASM.PH.ON
bmi .9
lda #$80
sta (pData),y
ldy #ASM.PC.PH
jsr DIR.SavePC
jmp DIR.OR
.9 lda #E.ILLEGAL.DIR
sec
rts

View File

@ -41,21 +41,35 @@ EXP.Eval.Next stz SRC.ACC.F
stz SRC.ACC+3
jsr SRC.GetChar
bcs EXP.Eval.Missing
cmp #'.' Local Label?
beq .13
cmp #':'
cmp #'.' Local Label?
bne .12
.13 jsr EXP.GetLocal
bcs .14
>LDA.G MAC.StkPtr
bne .9 illegal OUTSIDE macro
jsr EXP.GetLocal
bra .13
.12 cmp #':'
bne .14
>LDA.G MAC.StkPtr
beq .9 illegal OUTSIDE macro
jsr EXP.GetLocal
.13 bcs .19
jmp EXP.EvalOperator
.14 rts
.19 rts
.12 cmp #'*'
.14 cmp #'*'
bne .10
ldy #ASM.PC+3
ldx #3
.11 lda (pData),y
sta SRC.ACC,x
dey
@ -64,44 +78,61 @@ EXP.Eval.Next stz SRC.ACC.F
jsr SRC.GetNextChar
jmp EXP.EvalOperator
.9 lda #E.INV.LABEL
sec
rts
*---------------------------------------
.10 jsr SRC.IsDigit10 Decimal constant ?
bcs .1
jsr SRC.GetDecimal
bcs EXP.EvalExitRTS
jmp EXP.EvalOperator
.1 cmp #'$' Hex?
bne .2
jsr SRC.GetHex
bcs EXP.EvalExitRTS
bra EXP.EvalOperator
.2 cmp #'%' binary?
bne .3
jsr SRC.GetBinary
bcs EXP.EvalExitRTS
bra EXP.EvalOperator
.3 cmp #'&' octal?
bne .4
jsr SRC.GetOctal
bcs EXP.EvalExitRTS
bra EXP.EvalOperator
.4 cmp #'''
bne .43
jsr SRC.GetNextChar
bcs EXP.EvalExitSYN
jsr EXP.SetAccA
jsr SRC.GetNextChar
bcs EXP.EvalOperator
cmp #'''
beq .44
cmp #','
bne EXP.EvalExitSYN
bra EXP.EvalOperator
.44 jsr SRC.GetNextChar
bra EXP.EvalOperator
bra EXP.EvalOperator
.43 cmp #'"'
bne .42
jsr SRC.GetNextChar
bcs EXP.EvalExitSYN
ora #$80

View File

@ -1,7 +1,23 @@
NEW
AUTO 3,1
*---------------------------------------
FIO.Init >LDYA L.ASM.6502
FIO.Init.RTS rts
FIO.Init >LDYAI 256
>SYSCALL getmem
bcs FIO.Init.RTS
>STYA ZPLineBuf
txa
>STA.G SRC.hLineBuf
>LDYAI 256
>SYSCALL getmem
bcs FIO.Init.RTS
>STYA ZPTmpBuf
txa
>STA.G SRC.hTmpBuf
>LDYA L.ASM.6502
FIO.LOAD.CPU >STYA ZPPtr2
ldy #S.PS.hARGV

View File

@ -21,21 +21,28 @@ MAC.Init >SYSCALL SListNew
txa
>STA.G MAC.hArgBuf
>LDYAI 256
>LDYAI MA.MAXDEPTH*6
>SYSCALL getmem
bcs .9
>STYA ZPMacroStk
txa
>STA.G MAC.hStk
.9 rts
*---------------------------------------
MAC.Reset >STZ.G MAC.StkPtr
>STA.G MAC.CtxID
>STA.G MAC.NextCtxID
>STA.G MAC.CtxNextID
rts
*---------------------------------------
MAC.Quit >LDA.G MAC.hStk
MAC.Quit >LDA.G MAC.StkPtr
beq .10
jsr MAC.Pop
bra MAC.Quit
.10 >LDA.G MAC.hStk
beq .1
>SYSCALL FreeMem
@ -255,7 +262,10 @@ MAC.ReadLine >LDA.G MAC.hBuf
ldy #0
.1 lda (ZPMacroBuf)
beq .7
beq .8
cmp #C.CR
beq .8
inc ZPMacroBuf
bne .2
@ -273,7 +283,7 @@ MAC.ReadLine >LDA.G MAC.hBuf
.21 cmp #'#'
bne .20
lda ZPMacroArgCnt
ora #$30
sta (ZPLineBuf),y
@ -286,11 +296,15 @@ MAC.ReadLine >LDA.G MAC.hBuf
cmp #'9'+1
bcs .9
and #$0f
tax
dec
cmp ZPMacroArgCnt
bcs .1
jsr MAC.GetArgX
bcs .9
bcs .1 no arg ]n, append nothing
.3 lda (ZPPtr1)
sta (ZPLineBuf),y
@ -306,51 +320,32 @@ MAC.ReadLine >LDA.G MAC.hBuf
bra .1
.7 sta (ZPLineBuf),y
beq .8
iny
bra .1
.8 jmp MAC.Put
.8 lda #0
sta (ZPLineBuf),y
jmp MAC.Put
.9 lda #E.SYNTAX.ERROR
sec
rts
*---------------------------------------
MAC.Put >LDA.G MAC.StkPtr
tay
dey
dey skip mac ID
dey
dey
lda ZPPtr2
sta (ZPMacroStk),y
dey
lda ZPPtr2+1
sta (ZPMacroStk),y get offset
clc
rts
*---------------------------------------
MAC.Push >LDA.G MAC.StkPtr
cmp #MA.MAXDEPTH*8
cmp #MA.MAXDEPTH*6
beq .9
>LDA.G MAC.CtxID
pha
>INC.G MAC.Depth
>INC.G MAC.CtxStackPtr
clc
adc #MAC.CtxIDS
adc #MAC.CtxStack-1
tay
pla
sta (pData),y
>INC.G MAC.NextCtxID
>INC.G MAC.CtxNextID
>STA.G MAC.CtxID
>LDYA ZPLinePtr
@ -358,9 +353,8 @@ MAC.Push >LDA.G MAC.StkPtr
bcs .99
>STYA ZPPtr2
phx
ldx #0
.1 ldy #$ff
@ -375,7 +369,7 @@ MAC.Push >LDA.G MAC.StkPtr
lda #0
sta (ZPPtr2),y
.3 tya
tya
beq .4
inx
@ -386,8 +380,12 @@ MAC.Push >LDA.G MAC.StkPtr
bcc .1
inc ZPPtr2+1
bra .1
.3 tya
beq .4
inx
.4 >LDA.G MAC.StkPtr
tay
@ -425,13 +423,13 @@ MAC.Push >LDA.G MAC.StkPtr
MAC.Pop >LDA.G MAC.StkPtr
dec
dec
dec mac id
dec
dec
dec offset
dec
dec
dec arg cnt
dec hArgs
sta (pData),y 6 bytes off stack
@ -439,13 +437,13 @@ MAC.Pop >LDA.G MAC.StkPtr
lda (ZPMacroStk),y
>SYSCALL freemem
>LDA.G MAC.Depth
>LDA.G MAC.CtxStackPtr
clc
adc #MAC.CtxIDS
adc #MAC.CtxStack-1
tay
lda (pData),y
>STA.G MAC.CtxID
>DEC.G MAC.Depth
>DEC.G MAC.CtxStackPtr
clc
rts
@ -479,11 +477,29 @@ MAC.Get >LDA.G MAC.StkPtr
>STYA ZPMacroArgBuf get args
rts
*---------------------------------------
MAC.Put >LDA.G MAC.StkPtr
tay
dey to arg cnt
dey
dey skip mac ID
lda ZPPtr2
sta (ZPMacroStk),y
dey
lda ZPPtr2+1
sta (ZPMacroStk),y save offset
clc
rts
*---------------------------------------
MAC.GetArgX phy
>LDYA ZPMacroArgBuf
>STYA ZPPtr1
.1 ldy #$ff
.2 iny
@ -496,7 +512,7 @@ MAC.GetArgX phy
tya
beq .9
clc
sec
adc ZPPtr1
sta ZPPtr1
bcc .1

View File

@ -70,7 +70,7 @@ OUT.PrintLineErr
dec
jsr OUT.PrintLineErrDashA
>LDA.G MAC.Depth
>LDA.G MAC.CtxStackPtr
jsr OUT.PrintLineErrDashA
lda #'^'
@ -119,7 +119,7 @@ OUT.PrintLine.1 jsr OUT.PrintLineOutBuf
>PUSHBI 2
>SYSCALL printf
>LDA.G MAC.Depth
>LDA.G MAC.CtxStackPtr
.3 dec
bmi .4
@ -132,6 +132,7 @@ OUT.PrintLine.1 jsr OUT.PrintLineOutBuf
.4 >LDYA ZPLineBuf
>SYSCALL puts
jmp OUT.PrintCR1
*---------------------------------------
OUT.Print >SYSCALL printf

View File

@ -11,25 +11,19 @@ SRC.ParseLine jsr OUT.Reset
cmp #';' Comment?
beq .8
pha
* >LDA.G ASM.PASS
* beq .55
* >DEBUG
*.55
jsr SRC.DoCheck
pla
bcs .7
bcs .7 TRUE
lda (ZPLinePtr)
.1 cmp #C.SPACE false....skip label processing
beq SRC.ParseLine.DirOp
beq SRC.ParseLine.DirOp no label....
jsr SRC.GetNextChar
.2 jsr SRC.GetNextChar
bcs .8
cmp #C.SPACE
bne .1
bne .2
bra SRC.ParseLine.DirOp
@ -48,21 +42,28 @@ SRC.ParseLine.LABEL
beq SRC.ParseLine.DirOp
tax save char...
cmp #'.' local symbol?
beq .1
cpx #'.' local symbol?
bne .1
cmp #':' private symbol?
>LDA.G MAC.StkPtr
bne SRC.ParseLine.InvLbl illegal in MACRO
bra .2
.1 cpx #':' private symbol?
bne .8
>LDA.G MAC.StkPtr
beq SRC.ParseLine.InvLbl
beq SRC.ParseLine.InvLbl illegal OUTSIDE macro
.1 >LDA.G SYM.bInGlobal Not relative to Global label...
.2 >LDA.G SYM.bInGlobal Not relative to Global label...
bpl SRC.ParseLine.InvLbl
jsr SRC.GetNextChar
bcs SRC.ParseLine.InvLbl
jsr SRC.GetDecimal
bcs SRC.ParseLine.InvLbl
lda SRC.ACC+1
ora SRC.ACC+2
ora SRC.ACC+3
@ -70,17 +71,9 @@ SRC.ParseLine.LABEL
lda SRC.ACC
beq SRC.ParseLine.InvLbl .0 is not allowed
cpx #':'
beq .2
jsr SYM.NewLocalA
bcs SRC.ParseLine.RTS
bra SRC.ParseLine.DirOp
.2 jsr SYM.NewPrivateA
.3 bcs SRC.ParseLine.RTS
bra SRC.ParseLine.DirOp
.8 jsr SYM.NewOrGetGlobal
bcs SRC.ParseLine.RTS
@ -104,7 +97,7 @@ SRC.ParseLine.DirOp
cpx #20 .ELSE?
beq .1
cpx #20 .FIN?
cpx #30 .FIN?
bne SRC.ParseLine.Ok
.1 jmp (J.DIRECTIVES,x)
@ -937,7 +930,7 @@ SRC.ACC10 lda SRC.ACC ACC*2-> ACC & ACCTMP
SRC.DoCheck sec
>LDA.G ASM.DO.StackPtr
beq .8
clc
adc #ASM.DO.Stack-1
tay
@ -946,13 +939,13 @@ SRC.DoCheck sec
.8 rts CS if TRUE
*---------------------------------------
DEBUG.PSTR pha
>PUSHW L.MSG.PSTR
pla
>PUSHYA
>PUSHBI 2
>SYSCALL printf
rts
*DEBUG.PSTR pha
* >PUSHW L.MSG.PSTR
* pla
* >PUSHYA
* >PUSHBI 2
* >SYSCALL printf
* rts
*---------------------------------------
MAN
SAVE USR/SRC/BIN/ASM.S.SRC

View File

@ -10,9 +10,10 @@ NEW
* 2-5 : 32 bits Value
* 6+ : Local Symbols.....
*---------------------------------------
* Local Symbol Record: (5 bytes)
* Local/Private Symbol Record: (6 bytes)
* 0 : Local ID (1->255)
* 1-4 : 32 bits Value (PC)
* 1 : Macro Context ID (private)
* 2-5 : 32 bits Value (PC)
*---------------------------------------
SYM.Init >SYSCALL SListNew
bcs .9
@ -370,17 +371,7 @@ SYM.Acc2Global ldy #SYMG-1
rts
*---------------------------------------
* Local/Private Symbol Record: (6 bytes)
* 0 : Local ID (1->255)
* 1 : Macro Context ID
* 2-5 : 32 bits Value (PC)
*---------------------------------------
SYM.NewPrivateA sec
.HS 90 BCC
SYM.NewLocalA clc
ror ZPPtr1
tax Save Local ID
SYM.NewLocalA tax Save Local ID
>LDA.G SYM.bInGlobal not in a global label
bpl .91
@ -403,10 +394,6 @@ SYM.NewLocalA clc
cpy #ASM.PC
bne .1
lda #0
bit ZPPtr1
bpl .11 local, Ctx = 0
>LDA.G MAC.CtxID Get Macro Context ID
.11 pha
@ -428,7 +415,7 @@ SYM.NewLocalA clc
lda #0
sta (ZPSymbolBuf),y
tya
* >DEBUG
>STA.G SYM.GlobalPtr
lda (ZPSymbolBuf)

View File

@ -213,14 +213,9 @@ CS.INIT ldy #S.PS.ARGC
lda (pPs),y
beq .99
lda #1
>SYSCALL ArgV
>PUSHYA
>PUSHWI 0 Allocate
>SYSCALL RealPath
txa
>STA.G SRC.hFILENAME
jsr CS.RUN.ARGS
bcs .99
jsr FIO.Init
bcs .9
@ -232,21 +227,7 @@ CS.INIT ldy #S.PS.ARGC
jsr OUT.Init
>LDYAI 256
>SYSCALL getmem
bcs .9
>STYA ZPLineBuf
txa
>STA.G SRC.hLineBuf
>LDYAI 256
>SYSCALL getmem
bcs .9
>STYA ZPTmpBuf
txa
>STA.G SRC.hTmpBuf
clc
* clc
rts
.99 >PUSHW L.MSG.HELP
@ -256,6 +237,19 @@ CS.INIT ldy #S.PS.ARGC
sec
.9 rts
*--------------------------------------
CS.RUN.ARGS
lda #1
>SYSCALL ArgV
>PUSHYA
>PUSHWI 0 Allocate
>SYSCALL RealPath
txa
>STA.G SRC.hFILENAME
.8 clc
.9 rts
*--------------------------------------
CS.RUN ldy #S.PS.hStdIn
lda (pPS),y
>SYSCALL feof
@ -361,8 +355,6 @@ CS.RUN ldy #S.PS.hStdIn
.9 pha
jsr OUT.PrintLineErr
* jsr SYM.StoreGlobal Make sure last Global flushed
* jsr SYM.Dump
pla
sec
rts
@ -559,8 +551,6 @@ SYM.GlobalID .BS 2
SYM.hGlobalBuf .BS 1
SYM.GlobalPtr .BS 1
SYM.LookupID .BS 2
MAC.hList .BS 1
MAC.hBuf .BS 1
MAC.BufPtr .BS 1
@ -569,9 +559,9 @@ MAC.StkPtr .BS 1
MAC.hArgBuf .BS 1
MAC.ID .BS 2
MAC.CtxID .BS 1
MAC.NextCtxID .BS 1
MAC.Depth .BS 1
MAC.CtxIDS .BS MA.MAXDEPTH
MAC.CtxNextID .BS 1
MAC.CtxStackPtr .BS 1
MAC.CtxStack .BS MA.MAXDEPTH
OUT.PC .BS 4
OUT.Buf .BS 4