📄 trigonom.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;don't chang
Length EQU 07h
Length_Z EQU Length+Length
TableLength EQU 09
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.area S_C_T(data,abs)
.org 0x4f
SignAns:: .ds 1
SignT:: .ds 1
PointT:: .ds 1
BufferTan:: .ds Length+1
SignXn:: .ds 1
PointXn:: .ds 1
BufferXn:: .ds Length+1
.area Tan_code(code)
;**************************************
Sin::
lda SignX
sta SignTemp
;;Added by Golden
lda #0
sta0 SignX
call ClearBuffer
lda #0
sta OperandX+Length
lda #BufferXn
sta Addr1
call ClearData
lda #BufferTan
sta Addr1
call ClearData
lda #0
sta PointXn
sta PointT
sta SignXn
sta SignT
sta TanTemp
call CheckQuadrandtal
lda Temp1
adda #0
brz 1$
rorc
brc Sin90
rorc
brc Sin180
rorc
brc Sin270
rorc
brc Sin360
rorc
brc Sin30
1$: ;;;cau seta
lda #0h
sta Xn
lda #^Pdata
sta TableC+2
lda #@Pdata
sta TableC+1
lda #<Pdata
sta TableC
lda #0
sta Temp2
;;;get pi
call GetData
lda #0
sta Temp2
;;;get X
call Multiplation
;;;move X to operandX
lda #OperandZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointX
;;;save X to bufferZ
lda #BufferZ
sta Addr2
call CopyData
lda PointZ
sta PointBz
;;;;get X^2
call GetXX
;;;;save X^2 to bufferXn
lda #OperandZ
sta Addr1
lda #BufferXn
sta Addr2
call CopyData
lda PointZ
sta PointXn
lda #0
sta Xn
SinLoop:
;;;get (X^2/17!)
;;;get 1/17!
lda #^SinData
sta TableC+2
lda #@SinData
sta TableC+1
lda #<SinData
sta TableC
lda Xn
sta Temp2
inca
sta Xn
call GetData
;;;move X^2 to operandX
lda #BufferXn
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointXn
sta PointX
0$: ;;;get (X^2/17!)
call Multiplation
lda #^SinData
sta TableC+2
;;;get 1/Xn!
lda #@SinData
sta TableC+1
lda #<SinData
sta TableC
lda Xn
sta Temp2
inca
sta Xn
cmpe #08h
brc 3$
call GetData
;;;move to operandX
lda #OperandY
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointY
sta PointX
lda #OperandZ
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointZ
sta PointY
call Subtration
2$:
;;;move ans to operandX
lda #OperandZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointX
;;;move X^2 to operandY
lda #BufferXn
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointXn
sta PointY
br 0$
3$:
;;;move OperandZ to OperandY
lda #OperandZ
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointZ
sta PointY
;;;move X to OperandX
lda #BufferZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointBz
sta PointX
call Multiplation
lda #OperandZ
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointZ
sta PointY
lda #BufferZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointBz
sta PointX
call Subtration
EndSin:
lda SignAns
cmpe #03h
brc 1$
lda SignTemp
sta SignZ
ret
1$:
lda #01h
xora SignTemp
sta SignZ
ret
;*************************************
;
;*************************************
Cos::
;;caul X data
;;get pi/180 data
lda #0
sta SignX
call ClearBuffer
lda #0
sta OperandX+Length
lda #BufferXn
sta Addr1
call ClearData
lda #BufferTan
sta Addr1
call ClearData
lda #0
sta PointXn
sta PointT
sta SignXn
sta SignT
sta SignTemp
sta TanTemp
call CheckQuadrandtal
lda Temp1
adda #0
brz 1$
rorc
brc Cos90
rorc
brc Cos180
rorc
brc Cos270
rorc
brc Cos360
rorc
adda #0
rorc
adda #0
rorc
brc Cos60
1$:
lda #0h
sta Xn
;;set BufferZ1
lda #10h
sta BufferZ
lda #Length_Z
deca
sta PointBz
lda #^Pdata
sta TableC+2
lda #@Pdata
sta TableC+1
lda #<Pdata
sta TableC
lda #0
sta Temp2
call GetData
lda #0
sta Temp2
call Multiplation
lda #OperandZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointX
;;;get X^2
call GetXX
;;;save X^2 to BufferXn
lda #OperandZ
sta Addr1
lda #BufferXn
sta Addr2
call CopyData
lda PointZ
sta PointXn
lda #0
sta SignXn
CosLoop: ;;;move X^2 to operandX
lda #OperandZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointX
lda #^CosData
sta TableC+2
lda #@CosData
sta TableC+1
lda #<CosData
sta TableC
lda Xn
sta Temp2
inca
sta Xn
call GetData
0$: ;;;getX^2*(1/n!)
call Multiplation
;;;get next (1/n!)
lda #^CosData
sta TableC+2
lda #@CosData
sta TableC+1
lda #<CosData
sta TableC
lda Xn
sta Temp2
inca
sta Xn
cmpe #08h
brc 3$
call GetData
;;;move data to operandX
lda #OperandY
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointY
sta PointX
lda #0
sta SignX
;;;;move ans to operandY
lda #OperandZ
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointZ
sta PointY
lda SignZ
sta SignY
lda #0
sta SignZ
call Subtration
2$:
;;;move ans to operandX
lda #OperandZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointX
lda SignZ
sta SignX
;;;move X^2 to operandY
lda #BufferXn
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointXn
sta PointY
br 0$
3$:
lda #OperandZ
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointZ
sta PointY
lda SignZ
sta SignY
lda #OperandX
sta Addr1
call ClearData
lda Addr1
adda #Length
deca
sta r_dp
lda #01h
sta i
lda #0
sta PointX
sta SignX
call Subtration
EndCos:
lda SignAns
anda #06h
brnz 1$
.if 0
cmpe #02h
brz 1$
cmpe #04h
brz 1$
.endif
lda #0
sta SignZ
ret
1$:
lda #01h
sta SignZ
ret
;=====================================
Cos90:
Cos270:
Sin180:
Sin360:
lda #OperandZ
sta Addr1
lda #Length_Z
sta DpCount
call ClearData2
lda #0
sta PointZ
sta SignZ
lda SignZ
xora SignTemp
sta SignZ
ret
Cos180:
Sin270:
lda #OperandZ
sta Addr1
lda #Length_Z
sta DpCount
call ClearData2
lda #0
sta PointZ
lda #OperandZ
adda #Length
deca
sta r_dp
lda #01h
sta i
sta SignZ
lda SignZ
xora SignTemp
sta SignZ
ret
Cos360:
Sin90:
lda #OperandZ
sta Addr1
lda #Length_Z
sta DpCount
call ClearData2
lda #0
sta PointZ
sta SignZ
lda #OperandZ
adda #Length
deca
sta r_dp
lda #01h
sta i
lda SignZ
xora SignTemp
sta SignZ
ret
Cos60:
lda #OperandZ
sta Addr1
lda #Length_Z
sta DpCount
call ClearData2
lda #01h
sta PointZ
lda #OperandZ
adda #Length
deca
sta r_dp
lda #05h
sta i
br EndCos
Sin30:
lda #OperandZ
sta Addr1
lda #Length_Z
sta DpCount
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -