📄 syntax.asm
字号:
;-------------------------------------------
.PointCK:
lda0 .DataBuf
sta0 .Buf2
lda0 .Buf1
cmpe #0a0h
brz .SynError
lda0 .Buf1
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .CheckMem
lda0 .Buf2
sta0 .DataBuf
lda0 .AfterPari
cmpe #01h
brz .EndStackCk
cmpe #02h ;+
brz .EndStackCk
cmpe #03h ;-
brz .EndStackCk
cmpe #04h ;*
brz .EndStackCk
cmpe #05h ;/
brz .EndStackCk
cmpe #06h ;05h
brz .EndStackCk
cmpe #0ah
brz .EndStackCk
lda0 .Buf1
cmpe #0b2h
brz .EndStackCk
cmpe #0d3h
brz .EndStackCk
cmpe #0d7h
brz .EndStackCk
br .SynError
;-------------------------------------------
.DRGCK:
lda0 .AfterPari
sta0 .Buf3
lda0 .DataBuf
sta0 .Buf2
lda0 .Buf1
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .CheckMem
lda0 .Buf2
sta0 .DataBuf
lda0 .AfterPari
cmpe #06h ;05h
brz .SynError
cmpe #09h
brz .SynError
lda0 .Buf3
sta0 .AfterPari
br .EndStackCk
;-------------------------------------------
.MemCLR:
lda0 .DataBuf
cmpe #02h
brc .SynError
br .EndStackCk
;-------------------------------------------
.DoSemicolon:
lda0 .SimeFlag
inca
sta0 .SimeFlag
lda0 .Buf1
cmpe #0b0h ;b0=';'
brz .SynError
cmpe #0b4h ;b4=','
brz .SynError
lda0 .SimeFlag
cmpe #02h
brc .SynError
br .EndStackCk
;-------------------------------------------
.SignDec:
lda0 .DataBuf
sta0 .Buf2
lda0 .Buf1
cmpe #0b4h ; , ;2002 10 22 Alton
brz .EndStackCk
cmpe #0a8h
brz .EndStackCk
cmpe #0c3h
brz .EndStackCk
lda0 .Buf1
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .CheckMem
lda0 .Buf2
sta0 .DataBuf
lda0 .AfterPari
cmpe #01h
brz .SynError
cmpe #02h
brz .SynError
cmpe #0ah
brz .SynError
cmpe #09h
brz .EndStackCk
cmpe #12h ;Semicolon
brz .SynError
lda0 .Buf1
cmpe #0b3h
brz .SynError
br .EndStackCk
;-------------------------------------------
.CommaFractDms:
lda #0h
sta0 .DmsCount
lda0 .DataBuf
sta0 .Buf2
lda0 .Buf1
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .CheckMem
lda0 .Buf2
sta0 .DataBuf
lda0 .Buf1
cmpe #0b3h ;)
brz .EndStackCk
lda0 .DataBuf
cmpe #0b4h ;b4= ','
brz .Checkcomma
cmpe #0c3h ;fract
brz .Chkfract
lda0 .Buf1
cmpe #0b7h ;degree
brz .SynError
lda0 .AfterPari
cmpe #0ah
brz .EndStackCk
lda0 .AfterPari
cmpe #01h
brz .EndStackCk
cmpe #02h
brz .EndStackCk
br .SynError
.Chkfract:
.Checkcomma:
lda0 .Buf1
cmpe #0b7h ;degree
brz .EndStackCk
cmpe #0c3h ;fract
brz .SynError
cmpe #0b4h
brz .SynError
cmpe #0b0h
brz .SynError
lda0 .AfterPari
cmpe #0ah
brz .EndStackCk
lda0 .AfterPari
cmpe #01h
brz .EndStackCk
cmpe #02h
brz .EndStackCk
br .SynError
;-------------------------------------------
.SynError:
lda #02h
sta0 ErrorFlag
lda #0h ;set error site
sta0 .TFlag
lda0 .INDP
deca
sta0 .SFDP
.EndStackCk:
ret
;-------------------------------------------
.FunctCode::
lda #01h
sta PP
lda #^(.CheckFunC)
sta TPP
lda #@(.CheckFunC)
sta TPH
lda #<(.CheckFunC)
sta TPL
.KeepSearch:
ldv
sta0 .DataBuf+1
cmpe #0ffh
brz .EndCode
lda #0h
sta PP
lda0 .DataBuf+1
cmpe .DataBuf
brnz .KeepSearch
lda #08h
sta0 .AfterPari
br .EndunctCode
.EndCode:
lda #0h
sta0 .AfterPari
.EndunctCode:
ret
;-------------------------------------------
.CkMemory::
lda #0h
sta0 .AfterPari
lda #01h
sta PP
lda #^(.CheckMemory)
sta TPP
lda #@(.CheckMemory)
sta TPH
lda #<(.CheckMemory)
sta TPL
.Searchmem:
ldv
sta0 .DataBuf+1
cmpe #0ffh
brz .Endmem
lda #0h
sta PP
lda0 .DataBuf+1
cmpe .DataBuf ;.Buf1
brnz .Searchmem
lda #0eh
sta0 .AfterPari
.Endmem:
br .EndStackCk
;-------------------------------------------------
.DispPari::
lda #>.SetFlag
sta PP
lda .SetFlag
anda #20h
brnz .EndDispPari
lda #0h
sta DP
sta0 .DispFlag
.CKloop:
lda #0h
sta PP
lda DP
cmpe .DataDP
brz .EndDispPari
lda #02h
sta PP
lda i
sta0 .DataBuf
cmpe #0a0h
brz .SetPoint
cmpe #0ah
brc .CKPari
.NextDP:
incdp
br .CKloop
.CKPari:
lda0 .DataBuf
cmpe #0b7h
brz .DmsMode
cmpe #0c3h
brz .FractMode
cmpe #0d0h
brz .22$
cmpe #0d6h
brz .22$
lda0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .CheckMem
lda0 .AfterPari
cmpe #06h
brz .DisDmsFractFlag
cmpe #09h
brz .DisDmsFractFlag
cmpe #0ah
brz .DisDmsFractFlag
br .NextDP
.DmsMode:
lda #>.SetFlag
sta PP
lda .SetFlag
anda #~04h
ora #04h
sta .SetFlag
lda #04h
sta0 .DispFlag
br .NextDP
.FractMode:
lda0 .DispFlag
cmpe #03h
brz .NextDP
cmpe #02h
brz .NextDP
lda #>.SetFlag
sta PP
lda .SetFlag
anda #~18h
ora #08h
sta .SetFlag
lda #05h
sta0 .DispFlag
br .NextDP
.SetPoint:
lda0 .DispFlag
cmpe #02h
brz .NextDP
lda #>.SetFlag
sta PP
lda .SetFlag
anda #~1ch ;18
sta .SetFlag
lda #03h
sta0 .DispFlag
br .NextDP
.DisDmsFractFlag:
lda0 .DataBuf
cmpe #0xA8
brz .NextDP
lda0 .DispFlag
cmpe #02h
brz .NextDP
lda #0h
sta0 .DispFlag
br .11$
.EndDispPari:
lda #>.SetFlag
sta PP
lda .SetFlag
anda #0ch
cmpe #0ch
brz .22$
.11$:
lda0 .DispFlag
cmpe #0h
brnz .33$
.22$:
lda #>.SetFlag
sta PP
lda .SetFlag
anda #~1ch
sta .SetFlag
.33$:
lda #01h
sta0 .DispFlag
ret
;-------------------------------------------
.FormulaCk::
lda #0h
sta DP
sta0 .FormulaFlag
lda #02h
sta PP
lda i
cmpe #7ah
brz .ErrorSyn
.ScanEQU:
lda #02h
sta PP
incdp
lda i
cmpe #7ah
brz .IsFormula
lda #0h
sta PP
lda DP
cmpe .DataDP
brz .EndFormula
br .ScanEQU
.ErrorSyn:
lda #02h
sta0 ErrorFlag
lda #0h
sta0 .StoFlag
sta0 .FormulaFlag
lda #>.SFlag
sta PP
lda .SFlag
anda #~80h
sta .SFlag
br .EndFormula
.IsFormula:
lda DP
cmpe #01h
brnz .ErrorSyn
lda #01h
sta0 .FormulaFlag
lda #>.CalcFlag
sta PP
lda .CalcFlag
cmpe #01h
brz .CalcModeOp
lda0 .KeyPos
cmpe #7bh
brnz .EndFormula
.CalcModeOp:
lda #>.CalcFlag
sta PP
lda #01h
sta .CalcFlag
call .SyntaxFormula
lda0 ErrorFlag
cmpe #0h
brnz .ErrorSyn
call .Syntax
lda0 ErrorFlag
cmpe #0h
brnz .ErrorSyn ;.EndFormula
call .ClrFa
call .ClrP2
lda #02h
sta0 .FormulaDP
.stomem:
lda #02h
sta PP
lda0 .FormulaDP
sta DP
cmpe #04fh
brz .copy2formula
lda i
sta0 .DataBuf
cmpe #0e3h
brz .Recodemem
cmpe #0e4h
brz .Recodemem
cmpe #0e5h
brz .Recodemem
cmpe #0e6h
brz .Recodemem
cmpe #0e7h
brz .Recodemem
cmpe #0e8h
brz .Recodemem
cmpe #0f5h
brz .Recodemem
cmpe #0f6h
brz .Recodemem
cmpe #0f7h
brz .Recodemem
.nextdp1:
lda0 .FormulaDP
inca
sta0 .FormulaDP
br .stomem
.Recodemem:
lda #<SignFa
sta0 .Buf1
lda #09h
sta0 .Counter
.MEMsto:
lda #>SignFa
sta PP
lda0 .Counter
cmpe #0h
brz .nextdp1
lda0 .Buf1
sta DP
lda i
sta0 .DataBuf+1
cmpe #0h
brnz .Cmpdata
lda0 .Databuf
sta i
br .nextdp1
.Cmpdata:
lda #0h
sta PP
lda0 .Databuf
cmpe .Databuf+1
brz .nextdp1 ;;;
lda0 .Counter
deca
sta0 .Counter
lda0 .Buf1
inca
sta0 .Buf1
br .MEMsto
.copy2formula:
lda #>SignFa
sta PP
lda #<SignFa
sta0 .FormulaDP
lda #>.ForLDP
sta PP
lda0 .DataDP
sta .ForLDP
call .Input2Formula
lda #>.SetFlag
sta PP
lda .SetFlag
anda #~20h
sta .SetFlag
lda .SFlag
ora #88h
sta .SFlag
call .ClrP2Data
lda #0h
sta0 .StoFlag
.EndFormula:
ret
;-------------------------------------------------
.SyntaxFormula::
lda0 ErrorFlag
brnz .ENDSyntaxFormula
lda0 .FormulaFlag
cmpe #01h
brnz .ENDSyntaxFormula
lda #0h
sta DP
sta0 .AfterPari
lda #02h
sta PP
lda i
sta0 .DataBuf
lda #01h
sta PP
lda #^(.CheckMemory)
sta TPP
lda #@(.CheckMemory)
sta TPH
lda #<(.CheckMemory)
sta TPL
.CKmem:
ldv
sta0 .DataBuf+1
cmpe #0aah
brz .EndCkmem
lda #0h
sta PP
lda0 .DataBuf
cmpe .DataBuf+1
brnz .CKmem
lda #01h
sta0 .AfterPari
.EndCkmem:
lda0 .AfterPari
cmpe #01h
brnz .Errsyn
incdp
lda #02h
sta PP
lda i
cmpe #07ah ;7a = calc '='
brz .ENDSyntaxFormula
.Errsyn:
lda #02h
sta0 ErrorFlag
.ENDSyntaxFormula:
ret
;-------------------------------------------------
.GetMemData::
lda #>.SetFlag
sta PP
lda .SetFlag
ora #20h
sta .SetFlag
lda0 .FormulaDP
sta DP
cmpe #0ffh
brz .ClrForFlag
lda #>SignFa
sta PP
lda i
sta0 .ForData
sta0 .KeyPos
call .RCLReg
lda0 .KeyPos
cmpe #0h
brz .ClrForFlag
lda0 .FormulaDP
inca
sta0 .FormulaDP
br .EndGetMemData
.ClrForFlag:
lda #>.SFlag
sta PP
lda .SFlag
anda #~80h
ora #08h
sta .SFlag
call .Formula2Input
lda #>.ForLDP
sta PP
lda .ForLDP
sta0 .DataDP
.EndGetMemData:
ret
;-------------------------------------------------
.HeadCheck::
DB 0b3h,0d4h,0c8h,0b7h,0c3h,0d3h,0d7h,0c9h,0d5h
DB 0d2h,0c5h,0a6h,0a7h,0c9h,0d5h,0b4h,0bdh,0beh,0ffh
.SignCheck::
DB 0c9h,0d5h,0d3h,0d7h,0d4h,0c8h,0d2h,0c5h,0a2h,0a9h,0f9h
DB 0b3h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h,0aah,0bbh,0ceh
DB 0f6h,0f7h,0b7h,0c3h,0a4h,0a5h,0b1h,0b2h,0a8h
DB 0b4h,0a6h,0a7h,0a1h,0b0h,0ffh
.SignMUL::
DB 0aah,0bbh,0ceh,0d3h,0d7h,0d4h,0c8h,0d2h,0c5h,0a2h
DB 0a9h,0f9h,0b3h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h
DB 0f6h,0f7h,0b7h,0c9h,0d5h,0ffh
.Function:
DB 0a0h,0b3h,0b0h,0c8h,0d2h,0c5h,0d4h,0c8h,0d2h
DB 0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h,0a2h
DB 0f6h,0f7h,0a9h,0f9h,0d0h,0bdh,0beh,0d6h
DB 0b7h,0abh,0ach,0adh,0ffh
.DataEndCheck::
DB 0d4h,0c8h,0d2h,0c5h,0a2h,0a9h,0aah,0bbh,0ceh
DB 0b3h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h
DB 0f6h,0f7h,0b7h,0a0h,0f9h,0f8h,0b6h,0cfh
DB 0fah,0fbh,0fch,0fdh,0feh,0cah,0cbh,0bah
DB 0bch,0bdh,0beh,0ffh
.SymborCheck::
DB 0a4h,0a5h,0a6h,0a7h,0b2h,0b3h,0a2h,0f8h,0d0h
DB 0d6h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h
DB 0f6h,0f7h,0a9h,0f9h,0aah,0bbh,0ceh,0ffh
.MemoryCheck::
DB 0a8h,0b7h,0b8h,0b9h,0c0h,0c1h,0b3h,0b4h,0b5h
DB 0a9h,0f9h,0a2h,0ffh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -