📄 scical.asm
字号:
lda #00000001b
eor Float_Stat
sta Float_Stat
jsr Showangle
jmp jmplmainu
Exp10F:
lda exp_flag
beq ?skip_clr_fac_disp
stz DecText+1
stz DecText
stz decexp
ldx #6
?1: ;memory 7个字节 清除
stz Fac_Exp,x ;Fac_Exp7个字节 清除
dex
bpl ?1
jsr copy_fac_to_data_bak
jsr TranBinDec
jsr displaynum
jsr copy_data_bak_to_fac
stz exp_flag
?skip_clr_fac_disp:
rmb3 <ExpMinFlag
smb4 <ExpFlag
jsr ShowDecExp
jmp jmplmainu
pif: jsr Pi
bra ShowPreAns
LogF:
jsr Log_s
bra ShowPreAns
LnF: jsr Ln_s
bra ShowPreAns
ExpF: jsr Exp_s
bra ShowPreAns
XStepf: jsr Xi_s
lda Err_Flag
beq ?1
jmp ShowErr
?1:
stz fac_exp+5 ;07/17/2002
bra ShowPreAns
InvF:
jsr X_Inv
bra ShowPreAns
RootF: jsr Sqr_s
bra ShowPreAns
SinF:
jsr Sin_S
bra ShowPreAns
CosF: jsr Cos_S
bra ShowPreAns
TanF: jsr Tan_S
bra ShowPreAns
ASinF: jsr ASin_S
bra ShowPreAns
ACosF: jsr ACos_S
bra ShowPreAns
ATanF: jsr ATn_S
ShowPreAns:
LCls
lda Err_Flag
bne ?error
jsr copy_fac_to_data_bak
jsr TranBinDec
jsr DisPlayNum
jsr copy_data_bak_to_fac
smb4 <RefreshFlag
jmp jmplmainu
?error:
ShowErr:
jsr ClearNum
smb2 <ErrFlag
LCls
stz <ox
lda #16 ;1
sta <oy
lda #ds0bank
sta <drr
LDrawText ErrorTitle
stz <ox
lda #48 ;3
sta <oy
lda Err_Flag
cmp #35H
beq ?ListErr1
cmp #45H
beq ?ListErr2
cmp #85H
beq ?ListErr3
bra ?ListErr4
?ListErr1:
LDrawText OutRangeTitle
bra ?ListErr4
?ListErr2:
LDrawText OverFlowTitle
bra ?ListErr4
?ListErr3:
LDrawText ZeroTitle
?ListErr4:
smb4 <RefreshFlag
jmp jmplmainu
MCF:
ldx #6
?1: stz memory_bak,x
dex
bpl ?1
; rmb7 <MemFlag
stz MemFlag_bak
; smb4 <RefreshFlag
jsr ShowMemFlag
jmp jmplmainu
ShowMemFlag:
lda #33
sta <ox
lda #1
sta <oy
; bbr7 <MemFlag,?hideflag
lda MemFlag_bak
and #80h
beq ?hideflag
?showflag:
LoPrintImage FontM
rts
?hideflag:
LoClrImage FontM
rts
ShowKFlag:
lda #89
sta <ox
lda #1
sta <oy
bbr1 <KFlag,?1
?hide: LoPrintImage FontK
rts
?1: LoClrImage FontK
rts
PushKMem:
lda KeyCode
sta KKeyCode
jsr call_data_if_ok
ldy #>KMem
ldx #<KMem
stz <state_buf1
jsr MovMF
lda #00000010b
eor <KFlag
sta <KFlag
rts
;;*********************
;; 显示TextBuf内容:
;;*********************
DisplayNum:
;============================ add 2002-07-22
lda fac_exp+0
cmp #0ffh
bcc ?1
lda fac_exp+1
cmp #096h
bcc ?1
lda fac_exp+2
cmp #076h
bcc ?1
lda fac_exp+3
cmp #099h
bcc ?1
lda fac_exp+4
cmp #039h
bcc ?1
jmp memory_count_overflow
?1:
LCls
jsr five_to_inc_1
ldx #11
?42: lda TextBuf,x
bne ShowDecNum
dex
bpl ?42
ldx #11
lda #ffh
?43: sta TextBuf,x
dex
bne ?43
jsr ListNum
rts
ShowDecNum:
jsr CutTail
lda DecExp ;读取十进位指数部分.
cmp #8 ;if > 9 则用浮点显示法.
bcs ?ShowFloat ;否则用实数表示法.
jsr add_little_dot
ldx #8
?30200:
lda TextBuf,x
cmp #DotK
bne ?3020
lda #ffh
sta TextBuf,x
dex
bra ?3021
?3020: cmp #ffh
bne ?30211
dex
bra ?30200
?30211: cmp #0 ;小数点右边若为 0 则填ff
bne ?3021 ;
lda #0ffh ;
sta TextBuf,x ;
bra ?30200 ;
?3021: lda TextBuf,x ;小数点左边为若为ff 则填0
cmp #ffh ;
bne ?3022 ;
stz TextBuf,x ;
dex ;
bpl ?3021 ;
?3022:
jsr ListNum
rts
?ShowFloat:
lda DecExp
cmp #0f9h ;fe
bcc ShowFloat
Realint:
lda DecExp
eor #ffh
ina
tay
?2: ldx #8
?1: lda TextBuf,x
sta TextBuf+1,x
dex
bpl ?1
stz TextBuf
dey
bpl ?2
?3: lda #DotK
sta TextBuf+1
jsr ListNum
rts
ShowFloat:
ldx #7
?1: lda TextBuf,x
sta TextBuf+1,x
dex
bpl ?1
lda #DotK
sta TextBuf+1
jsr ListNum
jsr ShowDecExp
rts
;================================
TranBinDec:
stz DecExp
jsr JudgeZero
bne ?11
ldx #31
?12: stz TextBuf,x ;若为零,全清textbuf
dex
bpl ?12
rmb6 <MinusFlag
rts
?11:
jsr MovAF ;copy fac to arg
ldx #31
?1: stz TextBuf2,x ;Textbuff 预设1
stz TextBuf,x ;
dex ;
bne ?1 ;
lda #1 ;
sta TextBuf2 ;
stz TextBuf
ldy #31 ; 32 bits[Fac_Lo,Mo,Moh,Ho] 四个字节!
?0:
jsr ShiftLFac ;fac 左移 1bit[Fac_Lo,Mo,Moh,Ho]
bcc ?2
clc ;
sed ; TextBuf=TextBuf+TextBuf2
ldx #31 ;
?3: lda TextBuf2,x ;
adc TextBuf,x ;
adc #90h ;
and #0fh ;
sta TextBuf,x ;
dex ;
bpl ?3 ;
cld ;
?2:
ldx #0 ;
?21: lda TextBuf2,x ; Textbuf2/2
lsr ;
sta TextBuf2,x ;
bcc ?4 ;
lda #10 ;
clc ;
adc TextBuf2+1,x ;
sta TextBuf2+1,x ;
?4: inx ;
cpx #31 ;
bcc ?21 ;
lsr TextBuf2+15
bcc ?41
sed
ldx #31
?42: lda #0
adc TextBuf2,x
adc #90h
and #0fh
sta Textbuf2,x
dex
bpl ?42
cld
?41:
dey
bpl ?0
GetSign:
lda #10000000b
bit Fac_Sgn
beq ?a1
smb6 <MinusFlag
bra ExcExpBinDec
?a1: rmb6 <MinusFlag
stz DecExp
ExcExpBinDec:
lda Fac_Exp
cmp #81h
bcc Div2Textbuf
bne Mul2TextBuf
;============================================
;=======jrd add:2002 由于四舍五入强制将如:123.5678 499.. ==> 123.5678 500..
;============================================
lda textbuf+8
cmp #04h
bne ?skip_499_to_500
lda textbuf+9
cmp #07h
bcc ?skip_499_to_500
lda #05h
sta textbuf+8
stz textbuf+9
stz textbuf+10
stz textbuf+11
; stz textbuf+12
?skip_499_to_500:
lda decexp
bmi _ok
cmp #26h
bcc _ok
memory_count_overflow:
lda #85h
sta Err_Flag
jmp showerr ;出错处理
_ok:
;============================================
jsr MovFA
rts
Mul2Textbuf:
dec Fac_Exp
sed
clc
ldx #12
?1: lda TextBuf,x
adc TextBuf,x
adc #90h
and #0fh
sta TextBuf,x
dex
bpl ?1
cld
bcc ExcExpBinDec
ldx #11
?2: lda TextBuf,x
sta TextBuf+1,x
dex
bpl ?2
lda #1
sta TextBuf
lda TextBuf+12
cmp #5
bcc ?41
sed
ldx #11
?42: lda #0
adc TextBuf,x
adc #90h
and #0fh
sta Textbuf,x
dex
bpl ?42
cld
?41:
inc DecExp
jmp ExcExpBinDec
Div2TextBuf:
inc Fac_Exp
stz Textbuf+12
lsr TextBuf
php
ldx #1
?1: bcc ?2
lda TextBuf,x
adc #9
sta TextBuf,x
?2: lsr TextBuf,x
php
inx
cpx #12
bcs ?21
plp
bra ?1
?21: plp
plp
; bne ExcExpBinDec
bne ExcExpBinDec111
dec DecExp
ldx #0
?3: lda Textbuf+1,x
sta TextBuf,x
inx
cpx #12
bcc ?3
ExcExpBinDec111:
jmp ExcExpBinDec
ShowAngle:
lda #2
sta <ox
stz <oy
bbs0 <Float_stat,?show
?hide: LoPrintImage FontRad
rts
?show: LoPrintImage FontDeg
rts
ShowHyp:
lda #56
sta <ox
lda #1 ;1
sta <oy
bbs5 <HypFlag,?show
?hide: LoClrImage FontHyp
rts
?show:
LoPrintImage FontHyp
rts
ShowAdd:
jsr ClrFuncKey
lda #96
sta <ox
lda #2
sta <oy
LoPrintImage FontAdd
rts
ShowSub:
jsr ClrFuncKey
lda #96
sta <ox
lda #2
sta <oy
LoPrintImage FontSub
rts
ShowMul:
jsr ClrFuncKey
lda #96
sta <ox
lda #2
sta <oy
LoPrintImage FontMulK
rts
ShowDiv:
jsr ClrFuncKey
lda #96
sta <ox
lda #2
sta <oy
LoPrintImage FontDiv
rts
ShowXey:
jsr ClrFuncKey
lda #96
sta <ox
lda #2
sta <oy
LoPrintImage FontXey
rts
ShowXe1y:
lda #96
sta <ox
stz <oy
LoPrintImage FontXey1
rts
ClrFuncKey:
lda #96
sta <ox
stz <oy
loclrimage FontXey1
rts
Shownofun:
rts
;四舍五入:
five_to_inc_1:
lda float_bit
bne five_to_inc_1_two
normal_five:
lda DecExp
bmi DecExp_is_minus_in_five_to_inc_1
lda #<(TextBuf+8)
bra DecExp_is_plus_in_five_to_inc_1
DecExp_is_minus_in_five_to_inc_1:
cmp #0f9h ;fe
bcs _ff_or_fe_in_five_to_inc_1
lda #<(TextBuf+7) ; 保存8位数
bra DecExp_is_minuse_has_exp
_ff_or_fe_in_five_to_inc_1:
; inc
clc
adc #<(TextBuf+8) ; 保存8位数
DecExp_is_minuse_has_exp:
DecExp_is_plus_in_five_to_inc_1:
sta INXMOV
lda #>(TextBuf+8)
sta INXMOV1
;=====================
five_to_inc_for_digit_8:
ldy #0
lda (INXMOV),y ;目
pha ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -