📄 calcmain.asm
字号:
brz .DOAns
cmpe #0bbh ;Rad
brz .DOAns
cmpe #0ceh ;G%
brz .DOAns
cmpe #0h
brz .EndAutoaddANS ;ret
cmpe #31h ;shift abc
brz .EndAutoaddANS
cmpe #42h ;shift abc
brz .EndAutoaddANS
cmpe #52h ;sto
brz .EndAutoaddANS
cmpe #53h ;rcl
brz .EndAutoaddANS
cmpe #0c3h ;ab/c
brz .EndAutoaddANS
cmpe #0b7h ;degree
brz .EndAutoaddANS
cmpe #61h ;ins
brz .RndEnd
cmpe #65h ;del
brz .RndEnd
cmpe #60h ;ins
brz .RndEnd
cmpe #0b5h ;m+
brz .EndCheckRnd
cmpe #0cch ;left
brz .EndCheckRnd
cmpe #0ddh ;right
brz .EndCheckRnd
cmpe #77h ;%
brz .EndCheckRnd
cmpe #0a3h ;=
brz .EndCheckRnd
; cmpe #0dfh ;;;;;;;
; brz .EndCheckRnd
; cmpe #.MODE
; brz .EndCheckRnd
; cmpe #0b6h
; brz .EndCheckRnd
; cmpe #0bdh
; brz .EndCheckRnd
; cmpe #0beh
; brz .EndCheckRnd
; cmpe #0a8h
; brz .EndCheckRnd
; cmpe #0b0h
; brz .EndCheckRnd
; cmpe #0c2h ;eng
; brz .EndCheckRnd
; cmpe #041h ;Shift eng
; brz .EndCheckRnd
lda0 .KeyPos
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .CheckMem
lda0 .AfterPari
cmpe #07h ;Pari 7 ex:2X^2 funct
brz .DOAns
cmpe #08h ;Pari 8 ex:5X^Y 6funct
brz .DOAns
call .ClrP2Data
lda #01h
sta PP
lda .SFlag ;cancel = flag
anda #~08h
sta .SFlag
lda .SetFlag
anda #~3fh
sta .SetFlag
call Rekeyindisp2 ;only clear dotmatrix
br .EndCheckRnd
;;;;;;;;;;;;Auto add Ans to function oode
.DOAns:
lda #>.SRFlag
sta PP
lda #0h
sta .SRFlag
lda #>.SetFlag
sta PP
lda .SetFlag
anda #80h
brnz .PercntMul
.ANS12:
call .ClrP2Data ;CLR Input data area Ram
;;;;;;Auto add Ans data to Function code
.StartAns::
lda #>.SFlag
sta PP
lda .SFlag
anda #80h
brnz .EndCheckRnd
lda #02h
sta PP
lda #0h
sta DP
lda #.ANS
sta i
lda #01h
sta0 .DataDP ;Set auto add Ans key
br .EndCheckRnd
.PercntMul:
lda0 .KeyPos
cmpe #0a4h
brz .DOXAddZ
cmpe #0a5h
brz .DOXDecZ
br .ANS12
.DOXAddZ:
call .B_trans_X
call .Z_trans_Y
call Addition
br .EndCheckRnd
.DOXDecZ:
call .B_trans_X
call .Z_trans_Y
call Subtration
br .EndCheckRnd
;;;;;;;;;;;;disable display mode and rnd mode
.EndCheckRnd:
lda #01h
sta PP
lda .SetFlag
anda #~21h
sta .SetFlag
ret
.RndEnd:
lda #0h
sta0 .KeyPos
ret
;===========================================
.AutoaddANS::
lda0 .DataDP
cmpe #01h
brnz .EndAutoaddANS
lda #02h
sta PP
lda #0
sta DP
lda i
sta0 .DataBuf
sta0 .DataBuf+1
call .CheckPari
call .CheckMem
lda0 .AfterPari
cmpe #06h
brz .DOAns5
br .EndAutoaddANS
.BasenModeAns::
lda #>.SFlag
sta PP
lda .SFlag
anda #08h
brz .EndAutoaddANS
lda0 .KeyPos
sta0 .DataBuf
call .Paricmp
lda0 .AfterPari
cmpe #07h
brz .BaseAns
cmpe #09h
brz .BaseAns
cmpe #0fh
brz .Clrp2Inp
br .EndAutoaddANS
.BaseAns:
call .ClrP2Edit
lda #02h
sta PP
lda #0h
sta DP
lda #.ANS
sta i
lda #01h
sta0 .DataDP
br .ClrAnsFlag
.Clrp2Inp:
call .ClrP2Edit
lda #0h
sta0 .DataDP
.ClrAnsFlag:
lda #>.SFlag
sta PP
lda .SFlag
anda #~08h
sta .SFlag
lda #>.SRFlag
sta PP
lda #0h
sta .SRFlag
br .EndAutoaddANS
;;;;;;;;;;;;Auto add Ans to function mode
.DOAns5:
lda0 .KeyPos
cmpe #0a8h
brz .EndAutoaddANS
lda #02h
sta PP
lda0 .DataBuf
sta i
incdp
lda #.ANS
sta i
lda #02h
sta0 .DataDP ;Set auto add Ans key
;;;;;;;;;;;;disable display mode and rnd mode
.EndAutoaddANS:
ret
;-------------------------------------------
.BaseN:
lda #>.SetFlag
sta PP
lda .SetFlag
anda #20h
brz .EditMode
call .Buf_trans_X
lda0 .KeyPos
cmpe #.DecM
brz .TransDec
cmpe #.HexM
brz .TransHex
cmpe #.BinM
brz .TransBin
cmpe #.OctM
brz .TransOct
br .EditMode
.TransDec:
call .Buf_trans_Z
call .Z_trans_X
call CheckDecLimit
br .DispBaseN
.TransHex:
call Base_Dec2Hex
call .Z_trans_X
call CheckHexLimit
br .DispBaseN
.TransBin:
call Base_Dec2Bin
call .Z_trans_X
call CheckBinLimit
br .DispBaseN
.TransOct:
call Base_Dec2Oct
call .Z_trans_X
call CheckOctLimit
br .DispBaseN
.DispBaseN:
lda0 ErrorFlag
cmpe #0h
brnz .DispDotMatrix
call ChkDispAns
call ShowAnschk
call .I_trans_Z
br .EmitKeyD
.EditMode:
lda0 .KeyPos
cmpe #6ah
brz .Logic
lda #>BasenFlag
sta PP
lda BasenFlag
anda #0fh
brz .NotBaseN
call LogicKeyChk
lda0 .KeyPos
cmpe #0h
brz .EmitKeyD
call .BasenModeAns
br .Normalinput
;===========================================
.InterruptT1:
sta0 .TempA
lda PP
sta0 .PPTemp
lda OP1
sta0 .OP1Temp
lda0 .RandCnt
inca
sta0 .RandCnt
lda #01h
sta PP
lda T1Flag
ora #80h
sta T1Flag
lda0 .RandCnt
anda #0fh
cmpe #0fh
brnz .CKkeyCnt
lda0 .Sec
inca
sta0 .Sec
.CKkeyCnt:
; lda0 .KeyCnt
; ora #10h
; sta0 .KeyCnt
lda0 .OP1Temp
sta OP1
lda0 .PPTemp
sta PP
lda0 .TempA
reti
;===========================================
.InterruptT2:
sta0 .TempA
lda PP
sta0 .PPTemp
lda OP1
sta0 .OP1Temp
call .KeyScan
lda0 .TurboCnt
inca
sta0 .TurboCnt
lda0 .OP1Temp
sta OP1
lda0 .PPTemp
sta PP
lda0 .TempA
reti
;-------------------------------------------
; .Initial:
;-------------------------------------------
.Initial::
CLRINT
lda #0h
sta LCDC
lda #0ffh
sta PRTD
sta PRT17
lda #0h
sta PWMC
sta VOC
;-------------------------------------------
; Clear Lcd
;-------------------------------------------
.ClearLCD::
lda #0h
sta PP
lda #0h
sta DP
.Clrlcd:
lda #0h
sta i
incdp
lda DP
cmpe #0f0h
brz .EndInitiallcd
br .Clrlcd
.EndInitiallcd:
call .ClrallP
call .DispInitial
call .ClrData
call .SetTimeClk
ret
;-------------------------------------------
; ClrData
;-------------------------------------------
.ClrData::
call .ClrP2Edit
lda #0h
sta PP
sta ErrorFlag
sta Temp1
sta Temp2
sta .Sec
sta .KeyC
sta .KeyD
sta .Buf1
sta .Buf2
sta .CntIndex
sta .FormulaFlag
sta .DmsCount
sta .DataDP
sta .SFDP
sta .TFlag
sta .KeyPos ;save Key Posit
sta .KeyCnt
sta .KeyBuf
sta .KeyCodeBuf
sta .DataDP
sta .TurboCnt
lda #.RealseTime
sta0 .KeyTimeCnt
;===============initial PP=1================
lda #>.Count
sta PP
lda #0h
sta .Count
lda #01h
sta PP
lda #0h
sta .SetFlag
lda #40H
sta .SFlag
lda #>.SRFlag
sta PP
lda #0h
sta .SRFlag
sta .CalcFlag
call .ClrZ
call .DispInitial2
ret
;-------------------------------------------
; SetTimeCLK
;-------------------------------------------
.SetTimeClk:
lda #.SetT1H
sta T1H
lda #.SetT1L
sta T1L
lda #.SetT2H
sta T2H
lda #.SetT2L
sta T2L
lda #06h
sta IER
lda #00001100b ;T1 T2 enable
sta OP1
lda #0h
sta OP2
call .LcdcOn
ret
;01 is open 00 is close lcd 101 B 001 A
;-------------------------------------------
; SleepModeSet
;-------------------------------------------
.IntoSleepMode:
lda #0h
sta LCDC
sta0 .Sec
call .ClrData
lda #0ffh
sta PRT17
lda #0ffh
sta PRTD
lda OP1
ora #01001100b
sta OP1
lda #0h
sta0 .KeyCnt
sta0 .KeyBuf
sta0 .KeyCodeBuf
ret
;-------------------------------------------
; SleepWakeUpSet
;-------------------------------------------
.LcdcOn:
lda OP1
ora #20h
sta OP1
lda #00000101b ;bit 2 1=B type
sta LCDC
lda OP1
anda #~20h
sta OP1
ret
;-------------------------------------------
; .DisableInt
;-------------------------------------------
.DI::
lda OP1
anda #~10h
sta OP1
ret
;-------------------------------------------
; .EnableInt
;-------------------------------------------
.EI::
lda OP1
ora #14h
sta OP1
ret
;-------------------------------------------
; .IdleMode
;-------------------------------------------
.IdleMode::
lda #0h
sta PRT17
sta0 .KeyCnt
lda #0fch
sta PRTD
lda OP1
anda #~08h
ora #20h
sta OP1
lda OP2
ora #10000000b
sta OP2
.EndIdle:
ret
;-------------------------------------------
; .NormalMode
;-------------------------------------------
.NormalMode::
lda OP1
anda #~20h
ora #0ch
sta OP1
ret
;-------------------------------------------
.KeyCheck::
lda #>.Count
sta PP
lda .Count
cmpe #.HaveKey
brz .EndCheckKey
lda #0ffh
sta PRT17
lda #083h
sta PRTD
lda PRT17
cmpe #0ffh
brnz .SetNormal
lda PRTD
anda #83h
cmpe #83h
brnz .SetNormal
lda #>.Count
sta PP
lda #.NoKey
sta .Count
sta0 .KeyBuf
sta0 .KeyCnt
sta0 .KeyCodeBuf
ret
.SetNormal:
lda #>.Count
sta PP
lda .Count
cmpe #.KeyDown
brnz .EndCheckKey
ret
.EndCheckKey:
lda #>.Count
sta PP
lda #.HaveKey
sta .Count
call .NormalMode
ret
;----------------------------------------------
;.TestMode:
; call testcode_start
; br .TestMode
.ATTestMode:
call .Test
br .ATTestMode
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -