📄 postfix.asm
字号:
lda #09h ;06h
sta0 .AfterPari
br .EndCheckPari
.D_M_S:
lda0 .DataBuf+1
cmpe #.DMS
brnz .Degrees ;dms degree
lda #0ah
sta0 .AfterPari
br .EndCheckPari
.Degrees:
lda0 .DataBuf+1
cmpe #0aah
brnz .Degrees1
lda #0ah
sta0 .AfterPari
br .EndCheckPari
.Degrees1:
lda0 .DataBuf+1
cmpe #.Degree
brnz .Mins
lda #0ah
sta0 .AfterPari
br .EndCheckPari
.Mins:
lda0 .DataBuf+1
cmpe #.Minute
brnz .Secs
lda #0ah
sta0 .AfterPari
br .EndCheckPari
.Secs:
lda0 .DataBuf+1
cmpe #.Second
brnz .EXP
lda #0ah
sta0 .AfterPari
br .EndCheckPari
.EXP:
lda0 .DataBuf+1
cmpe #0a1h
brnz .CommaP
lda #0bh
sta0 .AfterPari
br .EndCheckPari
.CommaP:
lda0 .DataBuf+1
cmpe #0b4h
brnz .Sime
lda #02h
sta0 .AfterPari
br .EndCheckPari
.Sime:
lda0 .DataBuf+1
cmpe #0b0h
brnz .CKBaseN
lda #02h
sta0 .AfterPari
br .EndCheckPari
.CKBaseN:
lda0 .DataBuf+1
cmpe #20h ;and
brz .Paris9
cmpe #21h ;or
brz .Paris9
cmpe #22h ;xnor
brz .Paris9
cmpe #23h ;xor
brz .Paris9
cmpe #24h ;not
brz .Paris5
cmpe #25h ;neg
brz .Paris5
br .CKFunc
.Paris9:
lda #09h
sta0 .AfterPari
br .EndCheckPari
.Paris5:
lda #06h ;05h
sta0 .AfterPari
br .EndCheckPari
.CKFunc:
call .CheckFuncd
.EndCheckPari:
ret
;-------------------------------------------
.PushStackCls:
call .ClosEndPS
.PushStack:
lda0 .DataBuf
sta0 .Buf1
call .PushData
br .IN2PS
;-------------------------------------------
.PushData::
lda0 .DataBuf
sta0 Temp2
lda #.STPP
sta PP
lda0 .STDP
sta DP
cmpe #0ffh
brz .Push2Stack
lda i
sta0 .DataBuf
sta0 .DataBuf+1
cmpe #0h
brz .Push2Stack
cmpe #.LC
brz .Push2Stack
call .CheckPari
lda0 .AfterPari
sta0 .BeforePari ;-12/16
lda0 Temp2
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
lda #0h
sta PP
lda0 .AfterPari
suba .BeforePari
brnc .PopDataEQU
brz .PopDataEQU
.Push2Stack:
lda0 Temp2
sta0 .DataBuf
call .StoStack
lda0 .AfterPari
sta0 .BeforePari
br .EndPushData
.PopDataF:
lda0 .STDP
deca
sta0 .STDP
call .PopData
br .EndPushData
.PopDataEQU:
call .PopData
.EndPushData:
ret
;-------------------------------------------
.PopData:
lda #.STPP
sta PP
lda0 .STDP
sta DP
lda i
sta0 .DataBuf+1
lda0 .DataBuf
sta i
lda0 .DataBuf+1
sta0 .DataBuf
call .ClosEndPS
call .StoFuncPS
lda0 .AfterPari
sta0 .BeforePari
call .ClosEndPS
call .PopSatck
ret
;===========================================
.PopSatck:
lda #.STPP
sta PP
lda0 .STDP
sta DP
lda i
sta0 Temp2 ;Buf2
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
lda0 .AfterPari
sta0 .BeforePari
decdp
lda DP
cmpe #0ffh
brz .EndCkStack
cmpe #.LC
brz .EndCkStack
lda #.STPP
sta PP
lda i
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
lda #0h
sta PP
lda0 .AfterPari
suba .BeforePari
brc .PopStackall
brnz .EndCkStack
lda #.STPP
sta PP
lda0 Temp2 ;.Buf2
sta i
lda DP
sta0 .STDP
lda0 .DataBuf
sta0 .DataBuf+1
call .StoFuncPS
call .ClosEndPS
br .EndCkStack ;2002,01,23
.PopStackall:
lda #.STPP
sta PP
lda0 Temp2 ; .Buf2
sta i
lda DP
sta0 .STDP
lda0 .DataBuf
sta0 .DataBuf+1
call .StoFuncPS
call .ClosEndPS
br .PopSatck
.EndCkStack:
ret
;===========================================
.CkRightC::
lda #.STPP
sta PP
lda0 .STDP
sta DP
lda i
sta0 .DataBuf+1
cmpe #.LC
brz .EedDataC
lda0 .DataBuf+1
sta0 .DataBuf
lda0 .FractCount
cmpe #01h
brnz .NextPOP
lda0 .DataBuf
cmpe #0dfh ;DT
brnz .NextPOP
lda #0deh ;Fract div code
sta0 .DataBuf
lda #0h
sta0 .FractCount
.NextPOP:
call .StoFuncPS
call .ClosEndPS
lda0 .STDP
deca
sta0 .STDP
br .CkRightC
.EedDataC:
lda0 .STDP
deca
sta0 .STDP
lda #.PSPP
sta PP
lda0 .PSDP
sta DP
decdp
lda i
cmpe #0ffh
brz .EndCkRightC
lda #0ffh
sta i
incdp
lda DP
sta0 .PSDP
.EndCkRightC:
ret
;===========================================
.StoStack::
lda #.STPP
sta PP
lda #0h
sta DP
lda i
cmpe #0h
brz .FirstST
lda0 .STDP
sta DP
incdp
lda DP
cmpe #4fh
brnz .FirstST
lda #03h
sta0 ErrorFlag
.FirstST:
lda0 .DataBuf
sta i
lda DP
sta0 .STDP
ret
;===========================================
.LC2StackCls::
call .ClosEndPS
.LC2Stack::
call .StoStack
lda0 .DataBuf
sta0 .Buf1
br .IN2PS
;-------------------------------------------
.LCAddMulCls:
call .ClosEndPS
.LCAddMul:
call .CheckFrcatDF
lda0 .DataBuf
sta0 .Buf1
lda #0ech ;lc*
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .PushData
lda0 .Buf1
sta0 .DataBuf
call .StoStack
lda0 .DataBuf
sta0 .Buf1
br .IN2PS
.CheckFrcatDF:
lda #03h
sta PP
lda0 .STDP
sta DP
lda i
cmpe #0dfh
brnz .EndDFCK
lda #0deh
sta i
lda #0h
sta0 .FractCount
.EndDFCK:
ret
;===========================================
.StoPosfix::
lda0 .DecFlag
anda #01h
cmpe #01h
brnz .NoSignal
lda #0h
sta0 .DecFlag
lda #.PSPP
sta PP
lda0 .PSDP
sta DP
lda0 .DataBuf
sta0 Temp2
sta i
lda #.Negative
sta0 .Buf1
incdp
lda DP
sta0 .PSDP
lda #.STPP
sta PP
lda0 .STDP
sta DP
lda i
sta0 .DataBuf
sta0 .Buf2
cmpe #0h
brz .STOstk0
lda0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
lda0 .Buf1
sta0 .DataBuf
lda0 .AfterPari
cmpe #0h
brz .STOstk
cmpe #02h
brz .STOstk
cmpe #03h
brz .STOstk
cmpe #04h
brz .STOstk
cmpe #05h
brz .STOstk
cmpe #06h ;05h
brz .STOstk
cmpe #07h ;05h
brz .STOstk
cmpe #08h ;05h
brz .STOstk
cmpe #09h
brz .STOstk ;.StoPScls
cmpe #0bh
brz .PushSTK ;.StoPScls
cmpe #0ch
brz .PushSTK
br .Endps
.StoPScls:
call .ClosEndPS
br .StoFuncPS
.PushSTK:
lda #.STPP
sta PP
lda0 .STDP
inca
sta0 .STDP
sta DP
lda #.Negative
sta i
lda #0h
sta0 .DecFlag
br .Endps
.STOstk0:
lda0 .Buf1
sta0 .DataBuf
call .StoStack
lda0 Temp2
sta0 .DataBuf
br .Endps
.STOstk:
call .StoStack
lda0 Temp2
sta0 .DataBuf
br .Endps
.NoSignal::
lda #0h
sta0 .DecFlag
.StoFuncPS::
lda #.PSPP
sta PP
lda0 .PSDP
sta DP
lda0 .DataBuf
sta i
incdp
lda DP
sta0 .PSDP
.Endps:
ret
;===========================================
.SftRight::
lda0 .DataBuf
anda #0f0h
rorc
anda #~80h
rorc
anda #~80h
rorc
anda #~80h
rorc
anda #~80h
sta0 .DataBuf
ret
;===========================================
.SftLeft::
lda0 .DataBuf
anda #0fh
rolc
anda #~01h
rolc
anda #~01h
rolc
anda #~01h
rolc
anda #~01h
sta0 .DataBuf
ret
;===========================================
.CheckFuncd::
lda #01h
sta PP
lda #^(.CheckFunD)
sta TPP
lda #@(.CheckFunD)
sta TPH
lda #<(.CheckFunD)
sta TPL
.CmpFunC:
ldv
sta0 .DataBuf+1
cmpe #0ffh
brz .CheckOtherfunc
lda #0h
sta PP
lda0 .DataBuf
cmpe .DataBuf+1
brnz .CmpFunC
lda #06h ;05h
sta0 .AfterPari
br .EndCheck
.CheckOtherfunc:
lda #0ah
sta0 .AfterPari
.EndCheck:
ret
;===========================================
.CheckMem::
lda #01h
sta PP
lda #^(.CheckMemory)
sta TPP
lda #@(.CheckMemory)
sta TPH
lda #<(.CheckMemory)
sta TPL
.CmpMem:
ldv
sta0 .DataBuf+1
cmpe #0ffh
brz .EndMem
lda #0h
sta PP
lda0 .DataBuf
cmpe .DataBuf+1
brnz .CmpMem
lda #01h
sta0 .AfterPari
.EndMem:
lda0 .DataBuf
sta0 .DataBuf+1
ret
;-------------------------------------------
.Clrformula::
lda #01h
sta PP
lda #0b0h
sta DP
.ClrP1C:
lda DP
cmpe #0ffh
brz .EndClrP1
lda #0h
sta i
incdp
br .ClrP1C
.EndClrP1:
ret
;-------------------------------------------
.ClrP2::
lda #02h
sta PP
lda #50h
sta DP
.ClrP2C:
lda DP
cmpe #0ffh
brz .EndClrP2
lda #0h
sta i
incdp
br .ClrP2C
.EndClrP2:
ret
;-------------------------------------------
.ClrallP::
lda #01h
sta PP
lda #0h
sta DP
.ClrP:
lda DP
cmpe #0ffh
brz .EndClrP
lda #0h
sta i
incdp
br .ClrP
.EndClrP:
lda PP
inca
sta PP
cmpe #04h
brz .EndClrall
lda #0h
sta DP
br .ClrP
.EndClrall:
lda0 .FormulaFlag
cmpe #01h
brnz .NoFormulamode
lda #0h
sta0 .FormulaFlag
.NoFormulamode:
ret
;-------------------------------------------
.ClrP2Data::
lda #0h
sta PP
lda #0h
sta0 .DataDP
sta0 .SFDP
sta0 .CommaFlag
sta0 .TFlag
call .ClrZ 1$:
lda #01h
sta PP
lda #0h
sta .SetFlag
lda .SFlag ;2002.2.21
anda #~70h
sta .SFlag
anda #80h
brnz .EndCP2
lda #0h
sta .SFlag
sta0 .FormulaFlag
.EndCP2:
.ClrP2Edit::
lda #02h
sta PP
lda #0h
sta DP
.ClrP2Cd:
lda DP
cmpe #.PosfixDP
brz .EndClrP2d
lda #0h
sta i
incdp
br .ClrP2Cd
.EndClrP2d:
ret
;-------------------------------------------
.ClosEndPS::
lda #.PSPP
sta PP
lda0 .PSDP
sta DP
cmpe #50h
brz .EndClsPS
decdp
lda i
cmpe #0ffh
brz .EndClsPS
incdp
lda #0ffh
sta i
incdp
lda DP
sta0 .PSDP
.EndClsPS:
ret
;-------------------------------------------
.InitPsData:
lda #.PosfixDP
sta0 .PSDP ;Postfix dp
lda #0h
sta0 .STDP ;stack dp
lda #0h
sta0 .FractTrsCnt
sta0 .CommaFlag
sta0 .PointFlag
sta0 .INDP
sta0 .IFlag
sta0 .SymFlag
sta0 .DecFlag
sta0 .Buf1
sta0 .DataBuf
sta0 .BeforePari
sta0 .AfterPari
sta0 .DmsCount
sta0 .FractCount
lda0 .FormulaFlag ;IF flag=1 belong to formula mode
cmpe #01h
brnz .ClrP23
lda #01h
sta PP
lda .SFlag
anda #80h
brnz .ClrP23
lda0 .DataDP
cmpe #02h
brz .FormulaErr
lda #02h
sta PP
lda #0h
sta DP
lda i
sta0 .DataBuf
call .CheckMem
lda0 .AfterPari
cmpe #01h
brnz .FormulaErr
lda #02h
sta PP
lda #01h
sta DP
lda i
sta0 .Buf1
lda #02h
sta0 .INDP
br .ClrP23
.FormulaErr:
lda #02h
sta0 ErrorFlag
lda0 .DataDP
sta0 .SFDP
br .EndInitPsData
.ClrP23:
call .ClrP2
call .ClrP3
lda #01h
sta PP
lda #0h
sta .FunctFlag
lda StateFlag
anda #07h
brz .EndInitPsData
.EndInitPsData:
ret
;===========================================;,029h,026h,027h,028h,
.CheckFunC::
DB 0c8h,0d1h,0d2h,0d4h,0c4h,0c5h,0c6h,0c7h,0d8h,0d3h,0d7h
DB 0d9h,0b9h,0b9h,0c0h,0c1h,0e0h,0e1h,0e2h,0e9h,0f0h,0f1h,0bdh,0beh
DB 0f2h,0f3h,0f4h,0d5h,0c9h,0ffh
.CheckFunD::
DB 0d1h,0c4h,0c6h,0c7h,0d8h,0a8h
DB 0d9h,0b9h,0c0h,0c1h,0e0h,0e1h,0e2h,0e9h,0f0h,0f1h
DB 0f2h,0f3h,0f4h,0f9h,0ffh
.CheckMemory::
DB 0a9h,0f9h,0a2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0f5h,0f6h
DB 0f7h,0bbh,0ceh,0cfh,0fah,0fbh,0fch,0fdh,0feh,0cah
DB 0cbh,0bah,0bch,0aah,0ffh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -