📄 trigonom.asm
字号:
lda PointBz
sta PointY
;;;get X+(X^3/3)+(2/15X^5)
call Addition
;;;save X+(X^3/3)+(2/15X^5) to bufferZ
lda #OperandZ
sta Addr1
lda #BufferZ
sta Addr2
call CopyData
lda PointZ
sta PointBz
;;;cau X^7
;;;move X^5
lda #BufferXn
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointXn
sta PointX
;;;move X^2
lda #Buffer
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointB
sta PointY
;;;X^2*X^5
call Multiplation
;;;move X^7 to X
lda #OperandZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointX
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;push 17/315
lda #^TanTable1
sta TableC+2
lda #@TanTable1
sta TableC+1
lda #<TanTable1
sta TableC
lda #01
sta Temp2
call GetData
; lda #OperandY
; sta r_dp
; lda #53h
; sta i
; incdp
; lda #96h
; sta i
; incdp
; lda #82h
; sta i
; incdp
; lda #53h
; sta i
; incdp
; lda #96h
; sta i
; incdp
; lda #82h
; sta i
; incdp
; lda #0
; sta i
; lda #0dh
; sta PointY
call Multiplation
;;;move (17/315)X^7 to operandX
lda #OperandZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointX
;;;lda X+(X^3/3)+(2X^5/15)to Y
lda #BufferZ
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointBz
sta PointY
;;;get X+(X^3/3)+(2X^5/15)+(17X^7/315)
call Addition
;;;move X+(X^3/3)+(2X^5/15)+(17X^7/315) to X
lda #OperandZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointX
;;;save X+(X^3/3)+(2X^5/15)+(17X^7/315) to bufferZ
lda #BufferZ
sta Addr2
call CopyData
lda PointZ
sta PointBz
;;;move bufferTan to Y
lda #BufferTan
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointT
sta PointY
lda SignT
sta SignY
;;get X*Y
call Multiplation
lda #OperandZ
sta Addr1
lda #Buffer
sta Addr2
call CopyData
lda PointZ
sta PointB
lda SignZ
sta SignB
lda SignT
sta SignY
;;;Get X+Y
call Addition
lda #OperandZ
sta Addr1
lda #BufferXn
sta Addr2
call CopyData
lda PointZ
sta PointXn
lda SignZ
sta SignXn
lda #OperandX
sta Addr1
call ClearData
lda #Length_Z-1 ;;0bh
sta PointX
lda #10h
sta OperandX
lda #Buffer
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointB
sta PointY
lda SignB
sta SignY
call Subtration
lda #OperandZ
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointZ
sta PointY
lda SignZ
sta SignY
lda #BufferXn
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointXn
sta PointX
lda SignXn
sta SignX
call Division
lda TanTemp
adda #0
brz EndTan2
;;move operandZ to operandY
lda #OperandZ
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointZ
sta PointY
;;Clear operandX
lda #OperandX
sta Addr1
call ClearData
lda #10h
sta OperandX
lda #Length_Z-1 ;;0bh
sta PointX
call Division
EndTan2:
;lda SignAns
;cmpe #03h
;brc 1$
lda SignAns
anda #05h
brnz 1$
;;2,4
lda #01h
xora SignTemp
sta SignZ
ret
1$: ;;1,3
lda SignTemp
sta SignZ
ret
Tan45::
lda #OperandZ
sta Addr1
lda #Length_Z
sta DpCount
call ClearData2
lda #OperandZ ;;01.10.23
adda #Length-1 ;;01.10.23
sta r_dp ;;01.10.23
lda #01
sta i
;; lda #01h ;;01.10.23
;; sta OperandZ+5 ;;01.10.23
lda #0
sta PointZ
br EndTan2
Tan180::
Tan360::
lda #OperandZ
sta Addr1
lda #Length_Z
deca
sta DpCount
call ClearData2
lda #0
sta PointZ
sta SignZ
ret
Tan90::
Tan270::
lda #01h
sta ErrorFlag
ret
;*************
GetData1::
lda Temp1
deca
sta Temp1
brz 1$
;;;;-----------------------------------------------------add 08 21
cmpe #0eh
brnc 0$
lda #OperandY
sta Addr1
call ClearData
lda #Length_Z-1 ;;0bh
sta PointY
lda #10h
sta OperandY
ret
0$:
;;;;--------------------------------------------------end 0821 add
lda TableC
adda #02h
sta TableC
lda TableC+1
addc #0
sta TableC+1
;lda TableC+2
;addc #0
;sta TableC+2
br GetData1
1$: ;;;disable time int
; lda r_op1
; anda #~10h
; sta r_op1
;lda TableC+2
;Golden 3/28
lda #0
sta r_tpp
lda TableC+1
sta r_tph
lda TableC
sta r_tpl
2$: ;;wait rom data read
lda r_op1
anda #80h
brz 2$
ldv
sta TableC+1
3$:
;lda r_op1
;anda #80h
;brz 3$
ldv
sta TableC
lda #^ExData
sta TableC+2
; lda r_op1
; ora #10h
; sta r_op1
GetData::
lda Temp2
deca
sta Temp2
brnc 1$
lda TableC
adda #TableLength ;;;;Length+2 ;;;08h
sta TableC
lda TableC+1
addc #0
sta TableC+1
;lda TableC+2
;addc #0
;sta TableC+2
br GetData
1$:
lda #0h
sta DpCount
sta Temp2
; lda r_op1
; anda #~10h
; sta r_op1
;;;;--------------------------------------First read Point Data
;lda TableC+2
lda #0
sta r_tpp
lda TableC+1
sta r_tph
lda TableC
sta r_tpl
4$:
;lda r_op1
;anda #80h
;brz 4$
ldv
adda #Length_Z-1
sta PointY
lda TableC
inca
sta TableC
lda TableC+1
addc #0
sta TableC+1
;lda TableC+2
;addc #0
;sta TableC+2
2$:
;lda TableC+2
lda #0
sta r_tpp
lda TableC+1
sta r_tph
lda TableC
sta r_tpl
lda #OperandY
adda DpCount
sta r_dp
3$:
lda r_op1
anda #80h
brz 3$
ldv
sta i
lda TableC
inca
sta TableC
lda TableC+1
addc #0
sta TableC+1
;lda TableC+2
;addc #0
lda #0
sta r_tpp
lda DpCount
inca
sta DpCount
cmpe #Length+1 ;;;;;01.10.23 07h
brnz 2$
; lda r_op1
; ora #10h
; sta r_op1
ret
;**********************
CheckQuadrandtal::
lda #OperandX
sta Addr1
call CheckData
lda DpCount
adda #0
brz Input360
;;;;-------------------------------------------for check input data
lda PointX
suba DpCount
adda #1
sta Temp1
cmpe #88h
brc 2$
lda #1
sta0 SignAns
br EndCheck1
2$:
cmpe #0f7h ;;;old #0f3h ;;;2002.07.12tom
brnc InputErr
call Get360
call Mod
lda #OperandX ;;;;2002 03 20 alton
sta Addr1
call CheckData
lda DpCount
adda #0
brz Input360 ;;;;2002 03 20 alton
;;;check >270
3$:
lda #OperandY
sta Addr1
call ClearData
call Get270
call Chk1
lda #OperandX
sta Addr1
lda #OperandY
sta Addr2
lda #Length
sta DpCount
call CompareData
lda Temp1
adda #0
brz Input270
deca
brnz 4$
lda #OperandY
sta Addr1
call ClearData
call Get360
call Subtration
lda #0
sta SignX
sta SignY
sta SignFlag
sta SignZ
sta Temp1
lda #OperandZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointX
;>270
lda #08h
sta SignAns
br EndChkQuad
4$: ;;;check >180
lda #OperandY
sta Addr1
call ClearData
call Get180
call Chk1
lda #OperandX
sta Addr1
lda #OperandY
sta Addr2
lda #Length
sta DpCount
call CompareData
lda Temp1
adda #0
brz Input180
deca
brnz 5$
call Subtration
lda #0
sta SignX
sta SignY
sta SignZ
sta SignFlag
sta Temp1
;>180
lda #04h
sta SignAns
lda #OperandZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointX
br EndChkQuad
5$: ;;;check >90
lda #OperandY
sta Addr1
call ClearData
call Get90
call Chk1
lda #OperandX
sta Addr1
lda #OperandY
sta Addr2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -