📄 scical.asm
字号:
SciKeyUp:
jmp jmp_LMAINU
; "按键放开"事件处理程式.
;====================================================
SciKeyDown:
lda <KeyNo
cmp #EscKey
bne ?00
lda #<unit_conversion ;返回到哪一级菜单
;lda #<MainMenu_56
sta StrAddrL
lda #>unit_conversion
;lda #>MainMenu_56
sta StrAddrH
stz ItemStart
lda #01h
sta ItemOffset
lda <Mode
sta <ModeSave ; Save last mode。
lda #MenuMode
sta <Mode ; Enter Menu Select Mode
smb7 <EFlag
lda #16
sta itemno
stz science_calflag
jmp jmplmainu
?00:
cmp #SpaceKey
bne ?0001
bbs2 <ErrFlag,?01
lda #23
bra ?K2
?0001:
; ldx #34
ldx #33
?0: lda KeyNum,x
cmp <KeyNo
beq ?1
dex
bpl ?0
?01: jmp jmplmainu
?1:
bbr2 <ErrFlag,?2
cpx #14 ;if 为AC key
beq ?2
jmp jmplmainu
?2:
bbr5 <ShiftFlag,?K1 ;if按了shift键.
lda KeyParity2,x
bra ?K2
?K1: lda KeyParity1,x
?K2:
cmp #ShiftK
beq ?K3
rmb5 <ShiftFlag
pha
jsr ShowShift5
pla
?K3:
;==============2002-01-28 jrd
pha
cmp #Exp10K
beq ?skip_set_exp_flag
stz exp_flag
cmp #ShiftK
bcc ?skip_set_exp_flag
inc exp_flag
?skip_set_exp_flag:
pla
;==============
bbr5 <HypFlag,?23
cmp #SinK ; 及sin,cos,tan的话
bcc ?23 ; 转换成asin,acos,atan
adc #5 ;
?231: rmb5 <HypFlag
?23: cmp #HypK
beq ?232
cmp #ShiftK
beq ?232
rmb5 <HypFlag
?232:
pha
jsr ShowHyp
pla
sta KeyCode
cmp #Exp10K
bcc ?233 ;小数点和数字键
bbr1 <KFlag,?2320
cmp #equK
beq ?2321
?2320:
cmp #PerK
bcs ?2322
cmp #equk
bcc ?2321 ;m+,m-,mc,mr,ac
sbc #equk
sta FuncKey
bra ?2321 ;=,+,-,*,/
?2322: ;Ln,Log,Square Foot,1/X,E^X,10^X,X^2,X!,Sin,Cos,Tan
stz funckey ;ASin,ACos,ATan,SinH,CosH,TanH,ASinH,ACosH,ATanH
?2321:
; lda KeyCode
jmp ?3
?233:
bbr4 <ReFreshFlag,?24
rmb4 <ReFreshFlag
bbr3 <FuncFlag,?235
rmb3 <FuncFlag
stz NumStack
?235:
pha
lda <StatusFlag
and #00000010b
pha
; jsr ClearNum
jsr new_digit_ClearNum ;新数输入只清屏不显示
pla
ora <StatusFlag
sta <StatusFlag
jsr ShowKFlag
pla
?24: bbr4 <ExpFlag,?241 ;小数输入处理
cmp #DotK ;指数输入处理
beq ?24q
pha
lda DecText
sta DecText+1
pla
sta DecText
sta DecExp
jmp ShowExp10
?24q: jmp jmplmainu
;数字;输入处理:
?241:
; ldx CharNum
; cpx #10
pha
jsr if_have_dot_in_TextBuf
bne ?have_no_dot
ldx CharNum
cpx #9 ;10
bra ?cmp_bit_ok
?have_no_dot:
ldx CharNum
cpx #8 ;10
?cmp_bit_ok:
pla
bcs ?22
cpx #0
bne ?102
cmp #DotK
bne ?101
inc CharNum
inx
bra ?11
?102: cmp #dotk
bne ?11
?103: lda TextBuf,x
cmp #DotK
beq ?22
dex
bpl ?103
lda KeyCode
ldx CharNum
bra ?11
?101:
cmp #0
beq ?12
?11:
inc CharNum
?12:
sta TextBuf,x
jsr ListNum
?22: jmp jmplmainu
?3: ;Ln,Log,Square Foot,1/X,E^X,10^X,X^2,X!,Sin,Cos,Tan
other_cal_function: ;ASin,ACos,ATan,SinH,CosH,TanH,ASinH,ACosH,ATanH
lda KeyCode
cmp #MinusK
beq ?31
rmb4 <ExpFlag ;清除exp标志.
?31: sec
sbc #Exp10K
asl
tax
lda Function+1,x
pha
lda Function,x
pha
; LKeyTone
lda KeyCode
cmp #PiK ;这里可省去!!!
beq ?311 ;
cmp #PerK
bcc ?42
bne ?311
rmb0 <PerFlag ;若为百分号键 ,对百分号标志处理
?311: smb3 <FuncFlag
?42:
cmp #MAddK
bcc ?4
bbs4 <RefreshFlag,?4
?41:
jsr Fin
lda Err_Flag
beq ?4
pla
pla
jmp ShowErr
?4:
rts
MinusF:
bbr4 <ExpFlag,?1
lda #00001000b
eor ExpMinFlag
sta ExpMinFlag
jmp ShowExp10
?1:
lda #01000000b
eor StatusFlag
sta StatusFlag
bbs6 <MinusFlag,?2
stz Fac_Sgn
bra ?3
?2:
lda #0ffh
sta Fac_Sgn
?3:
jsr ListNum
jmp jmplmainu
ShowExp10:
stz DecExp
clc
ldx DecText+1
?242: beq ?243
lda #0ah
adc DecExp
sta DecExp
dex
bra ?242
?243: lda DecText
clc
adc DecExp
sta DecExp
bbr3 <ExpMinFlag,?1
lda #ffh
eor DecExp
ina
sta DecExp
?1: LCls
jsr ShowDecExp
jsr ListNum
jmp jmplmainu
PerF1:
jsr MovAF
lda PKeyCode
cmp #DivK
bcs ?1
ldy #>PerBuf
lda #<PerBuf
jsr MovFM
jsr FDivt_s
lda Err_flag
beq ?4
jmp ShowErr
?4:
lda #81h+6
sta Arg_Exp
lda #11001000b
sta Arg_Exp+1
stz Arg_Exp+2
stz Arg_Exp+3
stz Arg_Exp+4
stz Arg_Exp+5
jsr FMultt_s
bra ?2
?1:
lda #81h+6
sta Fac_Exp
lda #11001000b
sta Fac_Exp+1
stz Fac_Exp+2
stz Fac_Exp+3
stz Fac_Exp+4
stz Fac_Exp+5
lda PKeyCode
cmp #MulK
beq ?11
jsr FMulTT_s
bra ?2
?11: jsr FDivT_s
?2: lda Err_flag
beq ?3
jmp ShowErr
?3:
lda #EquK
pha
bra EqualF1
PerF: ldx NumStack
beq ?1
dex
lda TextBuf4,x
cmp #XeYk
bcc ?1
rmb6 <PcFlag
rmb0 <PerFlag
jsr MovAF
lda #81h+6
sta Fac_Exp
lda #11001000b
sta Fac_Exp+1
stz Fac_Exp+2
stz Fac_Exp+3
stz Fac_Exp+4
stz Fac_Exp+5
ldx NumStack
dex
lda TextBuf4,x
cmp #XeYK
beq ?XeyF
?Xe1yf:
jsr FMulTT_s
bra ?ok1
?XeYf:
jsr FDivT_s
?ok1: lda #EquK
sta KeyCode
lda Err_Flag
beq EqualF
jmp ShowErr
?1: smb0 <PerFlag
rmb6 <PcFlag
MAddF:
MSubF:
Equalf:
lda KeyCode
pha
bbr1 <KFlag,EqualF1
stz NumStack
lda KKeyCode
sta Keycode
jsr PushFac
ldy #>KMem
lda #<KMem
jsr MovFM
rmb4 <RefreshFlag
EqualF1:
ldx NumStack
bne ?operate
pla
pha
cmp #PerK
beq ?skip_disp_again ;jrd 2001-11-07
LCls
jsr copy_fac_to_data_bak
jsr TranBinDec
jsr DisPlayNum
jsr copy_data_bak_to_fac
jsr ShowKFlag
?skip_disp_again:
smb4 <RefreshFlag
rmb3 <FuncFlag
pla
cmp #MAddK
beq ?MemP1
cmp #MSubK
beq ?MemP1
cmp #PerK
bne ?q
bbr6 <PcFlag,?q
jmp PerF1
?q: jmp jmplmainu
?MemP1: jmp ?MemP
?operate:
bbr4 <RefreshFlag,?operate1
rmb4 <ReFreshFlag
bbs3 <FuncFlag,?operate1
ldx NumStack
dex
lda TextBuf4,x
cmp #DivK
bcs ?operate2
jsr PopArg
?Equalf1:
bra EqualF1
?operate1:
rmb3 <FuncFlag
?operate2:
ldy #>PerBuf
ldx #<PerBuf
stz <state_buf1
jsr call_data_if_ok
jsr MovMF ;last 2
smb6 <PcFlag
jsr PopArg ;last 255
lda KeyCode
sta PKeyCode
cmp #MulK
beq ?mulf
cmp #DivK
beq ?divf
cmp #AddK
beq ?addf
cmp #SubK
beq ?subf
cmp #XeYK
beq ?XeYf
cmp #Xe1YK
beq ?Xe1Yf
LdrawText Errortitle
jmp jmplmainu
?addf:
jsr FAddt_s
bra ?ok
?subf:
jsr FSubt_s
bra ?ok
?mulf:
jsr FMultt_S
bra ?ok
?divf: jsr FDivt_s
bra ?ok
?Xe1Yf:
jsr Sqr_X_Y ;计算第二个值!!!!!!!!!!!!!!!!!
?ok:
lda Err_Flag
beq ?EqualF1
pla
jmp ShowErr
?XeYf:
; jsr FPwrt_s
jsr XeyfF
bra ?ok
?MemP:
sta KeyCode
jsr call_data_if_ok
ldy #>TextBuf2
ldx #<TextBuf2
stz <state_buf1
jsr MovMF
ldy #>memory_bak
lda #<memory_bak
jsr Conupk
lda KeyCode
cmp #MAddK
bne ?MSubF
?MAddF:
jsr FAddt_s
bra ?ok1
?MSubF: jsr FSubt_s
?ok1: lda Err_Flag
bne ?showerror
;============================ add 2002-01-30
;============================
jsr call_data_if_ok
ldy #>memory_bak
ldx #<memory_bak
stz <state_buf1
jsr MovMF
ldy #>TextBuf2
lda #<TextBuf2
jsr MovFM
lda fac_sgn
and #80h
sta fac_sgn
lda #80h
sta MemFlag_bak
jsr ShowMemFlag
jmp jmplmainu
?showerror:
jmp ShowErr
MRF:
ldy #>memory_bak
lda #<memory_bak
jsr MovFM
jsr copy_fac_to_data_bak
jsr TranBinDec
jsr DisPlayNum
jsr copy_data_bak_to_fac
smb4 <RefreshFlag
smb3 <FuncFlag
jmp jmplmainu
JudgeZero:
lda Fac_Exp
beq ?qrts
ldx #4
?1: lda Fac_Exp,x
bne ?qrts
dex
bne ?1
?qrts: rts
CutTail:
ldx #11
?0: lda Textbuf,x
beq ?2
cmp #ffh
bne ?1
?2: lda #ffh
sta TextBuf,x
dex
bpl ?0
?1: rts
ListNum:
jsr Showfunction
jsr ShowMemFlag
jsr ShowAngle
jsr ShowMemFlag
jsr ShowKFlag
jsr ShowHyp
lda #112+32-8
sta <ox
lda #72-8-8
sta <oy
ldx #11
?001: lda TextBuf,x
cmp #DotK
beq ?000
dex
bpl ?001
ldx #'.'
LDrawChar12
lda #112+32-16
sta <ox
?000:
ldx #11
lda #72-8-8
sta <oy
?00: lda TextBuf,x
cmp #ffh
bne ?0
dex
bpl ?00
?0: lda TextBuf,x
phx
cmp #DotK
bne ?2
ldx #'.'
bra ?3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -