⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scical.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 4 页
字号:
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 + -