📄 trigonom.asm
字号:
anda #0fh
sta Xn
lda #BufferXn
sta Addr1
call ShiftToR
lda PointXn
deca
sta PointXn
lda SignTemp
deca
sta SignTemp
; cmpe #0ah
; brc ExLoop
;*
lda Xn
adda #0
brz ExLoop
lda #^ExData
sta TableC+2
lda #@ExData
sta TableC+1
lda #<ExData
sta TableC
lda PointXn
adda #04h
sta Temp1
lda Xn
deca
sta Temp2
call GetData1
lda #0
sta Temp2
lda #BufferZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointBz
sta PointX
call Multiplation
lda #OperandZ
sta Addr1
lda #BufferZ
sta Addr2
call CopyData
lda PointZ
sta PointBz
br ExLoop
EndEx:
lda SignXn
adda #0
brz 0$
lda #OperandX
sta Addr1
call ClearData
lda #OperandX
adda #Length
deca
sta r_dp
lda #10h
sta i
lda #01h
sta PointX
lda #OperandZ
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointZ
sta PointY
call Division
0$:
ret
Input0:
lda #OperandZ
sta Addr1
lda #Length_Z
sta DpCount
call ClearData2
lda Addr1
adda #Length
deca
sta r_dp
lda #01h
sta i
lda #0
sta PointZ
ret
ExInput0:
lda #OperandZ
sta Addr1
lda #Length_Z
sta DpCount
call ClearData2
lda #0
sta PointZ
sta SignZ ;;;;add by tom 03.12
ret
;=====================================
Ln::
lda SignX
adda #0
brnz InputErr
call ClearBuffer
lda #BufferXn
sta Addr1
call ClearData
lda #BufferTan
sta Addr1
call ClearData
lda #0
sta PointXn
sta PointT
sta SignXn
sta SignT
lda #BufferTan
sta Addr1
call ClearData
lda #0
sta PointT
sta SignT
sta Xn
lda #OperandX
sta Addr1
call CheckData
lda DpCount
sta PointTemp
deca
brnc InputErr ;;input 0
brnz 1$
lda0 PointX ;2002 03 19 alton
cmpe #0h ;
brnz 1$ ; alton
;;lda Temp1 ;;;;edit by tom 03.12
lda Temp2
deca
brz ExInput0
1$: ;;;keep operandX data to bufferXn
lda PointX
suba PointTemp
sta Temp2
lda PointTemp
sta PointX
lda Temp2
sta PointTemp
lda #OperandX
sta Addr1
lda #BufferXn
sta Addr2
call CopyData
lda PointX
sta PointXn
;;;check x>sqrt2
.if 0
lda #^Sqrt2 ;;;Get sqrt2
sta TableC+2
lda #@Sqrt2
sta TableC+1
lda #<Sqrt2
sta TableC
lda #0
sta Temp2
call GetData
.else
lda #0dh
sta0 PointY
lda #0
sta SignY
lda #14h
sta0 OperandY+0
lda #14h
sta0 OperandY+1
lda #21h
sta0 OperandY+2
lda #35h
sta0 OperandY+3
lda #62h
sta0 OperandY+4
lda #37h
sta0 OperandY+5
lda #30h
sta0 OperandY+6
lda #95h
sta0 OperandY+7
.endif
lda #0
sta Temp2
;;;keep sqrt2 data to buffer
lda #OperandY
sta Addr1
lda #Buffer
sta Addr2
call CopyData
lda PointY
sta PointB
call Subtration
lda SignZ
adda #0
brnz 3$ ;;;check X<=half_sqrt2
2$:
lda Xn
inca
sta Xn
anda #0fh
cmpe #0ah
brnc 10$
lda Xn
adda #06h
sta Xn
;;;;--------------check high nibble (start edit bytom 2002.03.21)
cmpe #0a0h
brnc 10$
adda #60h
sta Xn
lda SignT
inca
sta SignT
;;;;-------------end edit by tom 2002.03.21
10$:
lda #BufferXn
sta Addr1
call Div2
lda Temp1
adda PointXn
sta PointXn
lda #BufferXn
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointXn
sta PointX
lda #Buffer
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointB
sta PointY
lda #0
sta SignX
sta SignY
sta SignZ
call Subtration
lda SignZ
adda #0
brz 2$
lda #0
sta SignXn
br 5$
3$: ;;;check X<=half_sqrt2
;;;get half_sqrt2
.if 0
lda #^half_Sqrt2
sta TableC+2
lda #@half_Sqrt2
sta TableC+1
lda #<half_Sqrt2
sta TableC
lda #0
sta Temp2
call GetData
.else
lda #0eh
sta0 PointY
lda #0
sta SignY
lda #70h
sta0 OperandY+0
lda #71h
sta0 OperandY+1
lda #06h
sta0 OperandY+2
lda #78h
sta0 OperandY+3
lda #11h
sta0 OperandY+4
lda #86h
sta0 OperandY+5
lda #54h
sta0 OperandY+6
lda #75h
sta0 OperandY+7
.endif
lda #0
sta Temp2
sta SignY
sta SignZ
;;;keep helf_sqrt2 to buffer
lda #OperandY
sta Addr1
lda #Buffer
sta Addr2
call CopyData
lda PointY
sta PointB
;;;move X to operandx
lda #BufferXn
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointXn
sta PointX
;;;check X<=half_sqrt2
call Subtration
lda SignZ
adda #0
brz 5$
4$:
lda Xn
inca
sta Xn
;;;;-------------0228
anda #0fh
cmpe #0ah
brnc 40$
lda Xn
adda #06h
sta Xn
;;;;--------------check high nibble (start edit bytom 2002.03.21)
cmpe #0a0h
brnc 40$
adda #60h
sta Xn
lda SignT
inca
sta SignT
;;;;-------------end edit by tom 2002.03.21
40$:
;;;;--------------end 0228 bye tom
lda #BufferXn
sta Addr1
call Mul2
lda PointXn
suba Temp1
sta PointXn
;;;move helf_sqrt2 to operandY
lda #Buffer
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointB
sta PointY
;;;move X to operandX
lda #BufferXn
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointXn
sta PointX
lda #0
sta SignX
sta SignY
sta SignZ
call Subtration
lda SignZ
adda #0
brnz 4$
lda #01h
sta SignXn
5$: ;;;moev x to operandX
lda #BufferXn
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointXn
sta PointX
lda #0
sta SignX
;;;f=x-1
;;;set operandY=1
lda #OperandY
sta Addr1
call ClearData
lda #0
sta SignY
sta PointY
lda Addr1
adda #Length
deca
sta r_dp
lda #01
sta i
;;;cal X-1
call Subtration
;;;keep f to buffer
lda #OperandZ
sta Addr1
lda #Buffer
sta Addr2
call CopyData
;;;move f to operandX
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointB
sta PointX
lda SignZ
sta SignB
sta SignX
lda #0
sta SignZ
;;;loda dk to BufferXn
lda #BufferXn
sta Addr1
call ClearData
lda Addr1
adda #Length
deca
sta r_dp
lda Xn
sta i
;;;;-------------------------start edit by tom 2002.03.21
decdp
lda SignT
sta i
;;;;--------------------------end edit 2002.03.21 tom
lda #0
sta PointXn
sta SignT ;;;;2002.03.21
;;; s=f/(2+f)
;;;set operandY=2
lda #OperandY
sta Addr1
call ClearData
lda #0
sta PointY
sta SignY
lda Addr1
adda #Length
deca
sta r_dp
lda #02h
sta i
;;;get (2+f)
call Addition
;;;move(2+f)to operandY
lda #OperandZ
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointZ
sta PointY
lda SignZ
sta SignY
;;;move f to operandX
lda #Buffer
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointB
sta PointX
lda SignB
sta SignX
lda #0
sta SignZ
;;;Get s=f/(2+f)
call Division
;;;save s to bufferZ
lda #OperandZ
sta Addr1
lda #BufferZ
sta Addr2
call CopyData
lda #OperandX
sta Addr2
call CopyData
lda #OperandY
sta Addr2
call CopyData
lda PointZ
sta PointBz
sta PointX
sta PointY
lda SignZ
sta SignBz
sta SignX
sta SignY
lda #0
sta SignZ
;;;get (s^2*(L1+s^2*(L2+....(L6+s^2*L7)....)))
;;;get s^2
call Multiplation
lda #6
sta TanTemp
;;;get Ldata
lda #^LData
sta TableC+2
lda #@LData
sta TableC+1
lda #<LData
sta TableC
lda TanTemp
sta Temp2
call GetData
lda #0
sta Temp2
;;;save S^2 to bufferTan
lda #OperandZ
sta Addr1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -