📄 calcmain.asm
字号:
;--------------
.EmitKeyD:
lda #0h
sta0 .TurboCnt
lda #01h
sta PP
lda .SFlag
anda #80h
brz .3$
lda0 .FormulaFlag
cmpe #01h
brnz .3$
lda0 .StoFlag
cmpe #0h
brz .GetMdata
.3$:
call .EI ;Enable INT
call ModeIcom ;Disp Icom
call T1chkblank
lda0 .KeyCodeBuf
sta0 .KeyPos
cmpe #.ShiftL
brz .RelaseKey
cmpe #.ShiftR
brz .RelaseKey
lda #0h
sta0 .TurboCnt
.CheckKey0:
lda #.RealseTime ;10ms*32=0.5sec
sta0 .KeyTimeCnt
lda0 .TurboCnt
cmpe #.TimeRels
brnc .CheckKey0
lda #0h
sta0 .TurboCnt
br .CheckCode
;--------------
.RelaseKey:
;lda0 .SFDP
;cmpe #02h
;brnc .CheckCode
lda #0h
sta PP
lda0 .TurboCnt
cmpe .KeyTimeCnt
brnc .3$
lda #0ah ;100ms
sta0 .KeyTimeCnt
br .InputKeyHandle
;-------------------------------------------
;;The Funtion is for Quad Mode ,Quad Estimate have X1 & X2 & Y
.CalcEstimateXY:
lda #>.SFlag
sta PP
lda .SFlag ;SFlag 08 is set =
ora #08h
sta .SFlag
call .T_trans_X
lda #>DaltaXcnt
sta PP
lda DaltaXcnt
cmpe #0h
brnz .DispDaltaX2
br .NoEquCalc
.DispDaltaX2:
lda #>font
sta PP
lda font ;Font=Inputkey
cmpe #.DaltaX
brnz .DispDaltaY
lda #02h
sta PP
lda #0h
sta DP
lda i
cmpe #.DaltaX
brz .LREstimate2
.CkQR:
call .Syntax
lda0 ErrorFlag
cmpe #0h
brz .NoEquCalc
lda #0h
sta0 ErrorFlag
lda #>DaltaXcnt
sta PP
lda DaltaXcnt
cmpe #02h
brz .CalcQR_EstX1
lda #02h
sta DaltaXcnt
call QR_EstimateX2
br .OnlyDisp
.LREstimate2:
lda #>StateFlag
sta PP
lda StateFlag
anda #07h
cmpe #06h
brz .CkQR
cmpe #05h
brz .InvEstimateX
cmpe #04h
brz .PwrEstimateX
cmpe #03h
brz .ExpEstimateX
cmpe #02h
brz .LogEstimateX
.LinEstimateX:
call .LRX_trans_X
call LR_EstimateX
br .EstAnsCarry
.InvEstimateX:
call .LRX_trans_X
call LR_InvEstimateX
br .EstAnsCarry
.PwrEstimateX:
call .LRX_trans_X
call LR_PwrEstimateX
br .EstAnsCarry
.ExpEstimateX:
call .LRX_trans_X
call LR_ExpEstimateX
br .EstAnsCarry
.LogEstimateX:
call .LRX_trans_X
call LR_LnEstimateX
.EstAnsCarry:
call .Carry
br .OnlyDisp
;-------------------------------------------
.CalcQR_EstX1:
lda #01h
sta DaltaXcnt
call QR_EstimateX1
br .OnlyDisp
.DispDaltaY:
lda #02h
sta PP
lda #0h
sta DP
lda i
cmpe #.DaltaY
brz .LREstimateY2
.CkQRY:
call .Syntax
lda0 ErrorFlag
cmpe #0h
brz .NoEquCalc
lda #0h
sta0 ErrorFlag
lda #>DaltaXcnt
sta PP
lda #02h
sta DaltaXcnt
call QR_EstimateY
br .OnlyDisp
.LREstimateY2:
lda #>StateFlag
sta PP
lda StateFlag
anda #07h
cmpe #06h
brz .CkQRY
cmpe #05h
brz .InvEstimateY
cmpe #04h
brz .PwrEstimateY
cmpe #03h
brz .ExpEstimateY
cmpe #02h
brz .LogEstimateY
.LinEstimateY:
call .LRY_trans_Y
call .Y_trans_X
call LR_EstimateY
br .EstAnsCarry
.InvEstimateY:
call .LRY_trans_Y
call .Y_trans_X
call LR_InvEstimateY
br .EstAnsCarry
.PwrEstimateY:
call .LRY_trans_Y
call .Y_trans_X
call LR_PwrEstimateY
br .EstAnsCarry
.ExpEstimateY:
call .LRY_trans_Y
call .Y_trans_X
call LR_ExpEstimateY
br .EstAnsCarry
.LogEstimateY:
call .LRY_trans_Y
call .Y_trans_X
call LR_LnEstimateY
br .EstAnsCarry
;-------------------------------------------
.MemoryCK:
lda #01h
sta PP
lda #^(.MemoryCheck)
sta TPP
lda #@(.MemoryCheck)
sta TPH
lda #<(.MemoryCheck)
sta TPL
.SearchMem:
ldv
sta0 .DataBuf+1
cmpe #0ffh
brz .ResetStoRcl
lda #0h
sta PP
lda0 .DataBuf+1
cmpe #0a2h ;ANS=A2
brz .ResetStoRcl
cmpe .KeyPos
brnz .SearchMem
lda #>.SFlag
sta PP
lda .SFlag ;6 5 4 3
anda #78h ;AC RCL STO EQU
cmpe #58h ;AC STO EQU
brz .ClrStoRclFlag
lda #01h ;STO Check
sta PP
;lda .SetFlag
lda #20h ;ora #20h
sta .SetFlag
lda .SFlag
anda #30h
cmpe #10h ;SFlag 10 is Sto Mode
brz .CheckSto ; ;.DislayMode
cmpe #20h ;SFlag 20 is Rcl Mode
br .RCLMemory
.CheckSto:
lda #>.SFlag
sta PP
lda .SFlag
anda #08h
brz .NoEquCalc
lda #01h
sta PP
lda StateFlag
anda #08h
brz .ModeDisp
call .IsBaseNMode
br .ModeDisp
.ResetStoRcl:
lda0 .KeyPos
cmpe #.StoCode ;STO
brz .EmitKeyD
cmpe #.RclCode ;RCL
brz .EmitKeyD
.ClrStoRclFlag:
lda #01h
sta PP
lda .SFlag
anda #~30h
sta .SFlag
br .EmitKeyD
;===========================================
.SetRND:
call .CheckRndInp
br .EmitKeyD
.CheckRndInp:
lda #>.SFlag
sta PP
lda .SFlag
anda #08h
brz 2$
lda .SetFlag
anda #1ch
brnz 1$
lda DispFlag
anda #0c0h
brz 1$
call .OPZ2RND
1$:
call .Z_trans_I ;I=Ans
lda #01h
sta PP
lda .SetFlag
ora #01h
sta .SetFlag
2$:
ret
;-------------------------------------------
.DORnd:
lda0 .KeyPos
cmpe #0aah
brz 1$
cmpe #0bbh
brz 1$
cmpe #0ceh
brz 1$
cmpe #60H
brnz .EditModeInp
lda #0h
sta0 .KeyPos
call .CheckRndInp
br .EditModeInp
1$:
call .CheckRnd
br .CalcResoult
;------------------------------------------
.SetDRG:
lda0 .KeyPos
cmpe #01h
brz .SetD
cmpe #02h
brz .SetR
cmpe #03h
brz .SetG
br .EmitKeyD
.SetD:
lda #0aah
sta0 .KeyPos
br .ClrScreen
.SetR:
lda #0bbh
sta0 .KeyPos
br .ClrScreen
.SetG:
lda #0ceh
sta0 .KeyPos
.ClrScreen:
lda #02h
sta PP
lda #0h
sta DP
lda i
cmpe #0a2h
brnz .DispScreen
call .ClrP2Data
.DispScreen:
lda #>.SRFlag
sta PP
lda #0h
sta .SRFlag
call Clrfullmatrix
call Clrfullseg
call Rightchk
call ChkDispAns
call ShowAnschk
lda #01h
sta PP
lda .SetFlag
anda #~02h
sta .SetFlag
lda .SFlag
anda #08h
brz .CalcResoult
br .DORnd
;------------------------------------------
.DRG:
lda #>BasenFlag
sta PP
lda BasenFlag
anda #0fh
brnz .EmitKeyD
lda0 .ModeFlag
anda #0f0h
brnz .EmitKeyD
call DRGdisp
lda #01h
sta PP
lda .SetFlag
ora #02h
sta .SetFlag
br .EmitKeyD
;------------------------------------------
;;;;;;;;;;;;;;;Calc M+ M-
.M_ADD:
lda #>StateFlag
sta PP
lda StateFlag
anda #88h ;comp & basen
cmpe #08h
brz .BasenMadd
cmpe #80h
brnz .EmitKeyD
call .M_TO_X
call .Z_trans_Y
lda #0h
sta PP
call Addition
;call .CkOPZEmpty
call .Z_trans_X
call .X_TO_M
br .EmitKeyD
.BasenMadd:
call .M_TO_X
call .Buf_trans_Y
lda #0h
sta0 SignY
lda #0h
sta PP
call Addition
;call .CkOPZEmpty
call .Z_trans_X
call .X_TO_M
;call .Z_trans_Buf
br .EmitKeyD
.M_SUB:
lda #>StateFlag
sta PP
lda StateFlag
anda #88h ;comp & basen
cmpe #08h
brz .BasenMsub
cmpe #80h
brnz .EmitKeyD
;call .CkOPZEmpty
call .M_TO_X
call .Z_trans_Y
lda #0h
sta PP
call Subtration
call .Z_trans_X
call .X_TO_M
br .EmitKeyD
.BasenMsub:
call .M_TO_X
call .Buf_trans_Y
lda #0h
sta0 SignY
lda #0h
sta PP
call Subtration
;call .CkOPZEmpty
call .Z_trans_X
call .X_TO_M
call .Z_trans_Buf
br .EmitKeyD
.CkOPZEmpty:
lda #<OperandZ
sta0 Addr1
call CheckData
lda0 DpCount
cmpe #0h
brnz .Store_M
lda #>.SFlag
sta PP
lda .SFlag
anda #~08h
sta .SFlag
lda .SetFlag
anda #~20h
sta .SetFlag
.Store_M:
ret
;------------------------------------------
.STOMemory:
lda #01h
sta PP
lda BasenFlag
anda #0f0h
brz 1$
call .I_trans_Z
1$:
call .STOReg
br .DispDotMatrix
.RCLMemory:
lda #>.SFlag
sta PP
lda .SFlag
anda #40h
brz 1$
lda #0h
sta0 .DataDP
1$:
call .RCLReg
lda #>.SFlag
sta PP
lda .SFlag
anda #~40h
sta .SFlag
lda #01h
sta PP
lda BasenFlag
anda #0f0h
brnz .DispDotMatrix
call .Z_trans_I
call .Carry
br .DispDotMatrix
;;;;;;;;Anyway press left or right key set EditMode
.CkLR:
lda #0h
sta0 .FormulaFlag
call Chkkeylr
cmpe #01h
brz .DispDotMatrix
cmpe #02h
brz .EmitKeyD
br .DispDotMatrix
;------------------------------------------
.CKIns:
lda #01h
sta PP
lda Insetflag
cmpe #01h
brz .DispDotMatrix
br .CalcResoult
.INSck:
lda #>Insetflag
sta PP
lda0 .SFDP
cmpe #0h
brz .Ckeck1$
lda Insetflag
cmpe #0
brz .Ckeck0$
cmpe #1
brz .Ckeck1$
br .DispDotMatrix
.Ckeck0$:
lda #1
sta Insetflag
br .EmitKeyD
.Ckeck1$:
lda #0
sta Insetflag
br .EmitKeyD
;;;;Mode select Comp SD REG Deg Rad Gra Fix Sci Norm
.Modeadd:
lda #>StateFlag
sta PP
lda StateFlag
lda #0h
sta DaltaXcnt
call Modeselect
br .DispDotMatrix
.Logic:
call LogicSelect
br .DispDotMatrix
;;;;;;;;;;;Judge Key auto add Ans
.CheckRnd::
lda #>.SFlag
sta PP
lda .SFlag
anda #30h
brnz .MemoryCK
lda0 .KeyPos
cmpe #0a4h ;+
brz .DOAns
cmpe #0a5h ;-
brz .DOAns
cmpe #0a6h ;*
brz .DOAns
cmpe #0a7h ;/
brz .DOAns
cmpe #0d3h ;x^y
brz .DOAns
cmpe #0d7h ;xSqu
brz .DOAns
cmpe #0c8h ;x-1
brz .DOAns
cmpe #0d4h ;x!
brz .DOAns
cmpe #0c5h ;x^2
brz .DOAns
cmpe #0d2h ;x^3
brz .DOAns
cmpe #0aah ;degree
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -