📄 ln.asm
字号:
;|---------------------------------------|
;|Program name : Ln.asm |
;|Use bady: |
;|Programer: Alton |
;|Simple version |
;|---------------------------------------|
.area Ln_code(code)
;-------------------------------------------
; Ln
;-------------------------------------------
Ln::
call .LnInit
lda SignX
cmpe #01h
brz .ErrorInp
call .GetDpCountX
lda DpCount
cmpe #0h
brz .ErrorInp
call .X_trans_Buf ;Input X to Buf
call .ClrY
lda #01h
sta OperandY+6
call Subtration
call .GetDpCount
lda DpCount
cmpe #0h
brz .Ans1
call .Buf_trans_X
call .GetDpCountX
lda PointX
Suba DpCount
sta PointTemp
lda DpCount
sta PointX
sta Temp2
call .X_trans_Buf
.Comphalf_Sqrt2:
lda #>(half_Sqrt2)
sta TableC+1
lda #<(half_Sqrt2)
sta TableC
call .GetTabVal
;X <= (1/2Squ)
call .Z_trans_Y
call Subtration
lda SignZ
cmpe #0h
brz .CompSqrt2
.Beyondhalf_Sqrt2:
call .Put_1_to_OperandX ;K=R_buf
call .R_trans_Y ;K=K+1
call Addition
call .Z_trans_R
call .Put_2_to_OperandX ;X=2*X
call .Buf_trans_Y
call Multiplation
call .Z_trans_Buf
;X > (1/2Squ)
lda #>(half_Sqrt2)
sta TableC+1
lda #<(half_Sqrt2)
sta TableC
call .GetTabVal
call .Z_trans_Y
call .Buf_trans_X
call Subtration
lda SignZ
cmpe #0h
brnz .Beyondhalf_Sqrt2
lda #01h
sta PP
lda #01h
sta Sign_r
lda #0h
sta PP
.CompSqrt2:
lda #>(Sqrt2)
sta TableC+1
lda #<(Sqrt2)
sta TableC
call .GetTabVal
call .Z_trans_Y
call .Buf_trans_X
call Subtration
lda SignZ
cmpe #0h
brnz .EndInputCheck
.Under_Sqrt2:
call .Put_1_to_OperandX ;K=R_buf
call .R_trans_Y ;K=K+1
call Addition
call .Z_trans_R
call .Put_2_to_OperandX ;X=X/2
call .X_trans_Y
call .Buf_trans_X
call Division
call .Z_trans_Buf
lda #>(Sqrt2)
sta TableC+1
lda #<(Sqrt2)
sta TableC
call .GetTabVal
call .Z_trans_Y
call .Buf_trans_X
call Subtration
lda SignZ
cmpe #0h
brz .Under_Sqrt2
.EndInputCheck:
;f=Buf_buf
call .Put_1_to_OperandX ;f=x-1
call .X_trans_Y
call .Buf_trans_X
call Subtration
call .Z_trans_Buf
;S=S_Buf
call .Put_2_to_OperandX ;S=f/(2+f)
call .Buf_trans_Y
call Addition
call .Z_trans_Y
call .Buf_trans_X
call Division
call .Z_trans_B
call .Z_trans_S
;hfsq=I_Buf
call .Buf_trans_X ;hfsq=0.5*f*f
call .XSqu
call .Z_trans_X
call .ClrY
lda #05h
sta OperandY+6
lda #01h
sta PointY
call Multiplation
call .Z_trans_I
;;Log_L
call .Log_L ;R=Z_Buf
call .I_trans_X ;hfsq+R
call .Z_trans_Y
call Addition
call .S_trans_X ;s*(hfsq+R)
call .Z_trans_Y
call Multiplation
call .I_trans_X ;hfsq-(s*(hfsq+R))
call .Z_trans_Y
call Subtration
call .Buf_trans_Y ;(hfsq-(s*(hfsq+R)))-f
call .Z_trans_X
call Subtration
call .Z_trans_Buf ;result store Buf
lda #>(Ln2_hi) ;Ln2_hi
sta TableC+1
lda #<(Ln2_hi)
sta TableC
lda #0h
sta .M_Data_Offset
call .GetTabVal
call .Z_trans_X
call .R_trans_Y ;(Ln2_hi)*k
call Multiplation
call .Z_trans_X ;((Ln2_hi)*k)-(hfsq-(s*(hfsq+R)))-f)
call .Buf_trans_Y
call Subtration
call .Z_trans_Buf
;-------------------------------------------
lda Temp2 ;
cmpe #0h
brz .ErrorInp
lda PointTemp
cmpe #80h
brnc .2$
lda #0ffh
suba PointTemp
inca
sta .M_hexbuf+1
br .MulmaxLn
.2$:
lda PointTemp
sta .M_hexbuf+1
.MulmaxLn:
call .ClrX
lda #0
sta .M_hexbuf
call .Hex2Bcd
;lda .M_bcdbuf
;sta0 OperandX+5
lda .M_bcdbuf+1
sta0 OperandX+6
lda #>(MaxLn)
sta TableC+1
lda #<(MaxLn)
sta TableC
lda #0h
sta .M_Data_Offset
call .GetTabVal
call .Z_trans_Y
call Multiplation
call .Z_trans_X
call .Buf_trans_Y
lda PointTemp
cmpe #80h
brc AddLn10
call Subtration
lda #01h
sta SignZ
br .EndLn
AddLn10:
call Addition
.EndLn:
ret
.ErrorInp:
lda #01h
sta ErrorFlag
br .EndLn
.Ans1:
call .ClrZ
br .EndLn
;-------------------------------------------
.Log_L::
call .B_trans_X
call .XSqu
call .Z_trans_B
lda #0h
sta .M_Data_Offset
;lda #^(LTable)
;sta TableC+2
lda #>(LTable)
sta TableC+1
lda #<(LTable)
sta TableC
.GetLog_L:
call .GetTabVal
call .Z_trans_Y ;R store Ldata
call .B_trans_X ;B=s^2 s=(F/(2+F))
call Multiplation ;Z*L7
call .Z_trans_X
call .NextL ;L6
call .NextL ;L5
call .NextL ;L4
call .NextL ;L3
call .NextL ;L2
call .NextL ;L1
ret
.NextL:
lda #0ah
sta .M_Data_Offset
call .GetTabVal
call .Z_trans_Y
call Addition
call .Z_trans_X
call .B_trans_Y
call Multiplation
call .Z_trans_X
ret
;-------------------------------------------
.LnInit:
lda #0h
sta .M_temp
sta .M_Data_Offset
call .ClrZ
call .Z_trans_R
call .Z_trans_I
call .Z_trans_Buf
call .Z_trans_B
call .Z_trans_S
ret
;-------------------------------------------
LTable:
DB 000h,00eh,014h,079h,081h,098h,060h,051h,016h,0ffh ;L7
DB 000h,00eh,015h,031h,038h,037h,069h,092h,009h,0ffh ;L6
DB 000h,00eh,018h,018h,035h,072h,016h,016h,018h,0ffh ;L5
DB 000h,00eh,022h,022h,021h,098h,043h,021h,049h,0ffh ;L4
DB 000h,00eh,028h,057h,014h,028h,074h,036h,062h,0ffh ;L3
DB 000h,00eh,039h,099h,099h,099h,099h,094h,009h,0ffh ;L2
DB 000h,00eh,066h,066h,066h,066h,066h,066h,067h,0ffh ;L1
Ln2_hi:
DB 000h,00eh,069h,031h,047h,018h,005h,059h,094h,0ffh ;;0ch
Sqrt2:
DB 000h,00dh,014h,014h,021h,035h,062h,037h,030h,0ffh
half_Sqrt2:
DB 000h,00eh,070h,071h,006h,078h,011h,086h,054h,0ffh
MaxLn:
DB 000h,00dh,023h,002h,058h,050h,092h,099h,040h,0ffh
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -