📄 trigonom.asm
字号:
lda #Length
sta DpCount
call CompareData
lda Temp1
adda #0
brz Input90
deca
brnz 6$
lda #OperandY
sta Addr1
call ClearData
call Get180
call Subtration
lda #0
sta SignX
sta SignY
sta SignZ
sta SignFlag
sta Temp1
;>90
lda #02h
sta SignAns
lda #OperandZ
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointZ
sta PointX
br EndChkQuad
6$:
;<90
lda #01h
sta SignAns
EndChkQuad: ;;;chk 30
lda #OperandY
sta Addr1
call ClearData
lda #0
sta PointY
lda #OperandY
adda #Length
deca
sta r_dp
lda #30h
sta i
call Chk1
lda #OperandX
sta Addr1
lda #OperandY
sta Addr2
lda #Length
sta DpCount
call CompareData
lda Temp1
adda #0
brz Input30
deca
brnz 0$
;;;chk 45
lda #OperandY
sta Addr1
call ClearData
lda #0
sta PointY
lda #OperandY
adda #Length
deca
sta r_dp
lda #45h
sta i
call Chk1
lda #OperandX
sta Addr1
lda #OperandY
sta Addr2
lda #Length
sta DpCount
call CompareData
lda Temp1
adda #0
brz Input45
deca
brnz 0$
lda #01h
sta TanTemp
;;;chk 60
lda #OperandY
sta Addr1
call ClearData
lda #0
sta PointY
lda #OperandY
adda #Length
deca
sta r_dp
lda #60h
sta i
call Chk1
lda #OperandX
sta Addr1
lda #OperandY
sta Addr2
lda #Length
sta DpCount
call CompareData
lda Temp1
adda #0
brz Input60
0$:
EndCheck1:
lda #0
sta Temp1
ret
Input90:
lda #01h
sta Temp1
ret
Input180:
lda #02h
sta Temp1
ret
Input270:
lda #04h
sta Temp1
ret
Input360:
lda #08h
sta Temp1
ret
Input30:
lda #10h
sta Temp1
ret
Input45:
lda #20h
sta Temp1
ret
Input60:
lda #40h
sta Temp1
ret
InputErr::
lda #01h
sta ErrorFlag
ret
ProgErr:
br ProgErr
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Chk1::
lda PointX
cmpe PointY
brz 2$
lda OperandY
anda #0f0h
brnz 5$
lda #OperandY
sta Addr1
call ShiftToL
lda PointY
inca
sta PointY
br Chk1
5$:
lda #OperandX
sta Addr1
call ShiftToR
lda PointX
deca
sta PointX
br Chk1
2$:
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Get360:
lda #OperandY
sta Addr1
call ClearData
lda #OperandY
adda #Length
deca
sta r_dp
lda #60h
sta i
decdp
lda #03h
sta i
lda #0
sta PointY
ret
Get270:
lda #OperandY
sta Addr1
call ClearData
lda #OperandY
adda #Length
deca
sta r_dp
lda #70h
sta i
decdp
lda #02h
sta i
lda #0
sta PointY
ret
Get180:
lda #OperandY
sta Addr1
call ClearData
lda #OperandY
adda #Length
deca
sta r_dp
lda #80h
sta i
decdp
lda #01h
sta i
lda #0
sta PointY
ret
Get90:
lda #OperandY
sta Addr1
call ClearData
lda #OperandY
adda #Length
deca
sta r_dp
lda #90h
sta i
decdp
lda #00h
sta i
sta PointY
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GetXX::
lda #OperandX
sta Addr1
lda #OperandY
sta Addr2
call CopyData
lda PointX
sta PointY
lda #OperandZ
sta Addr1
lda #Length_Z
sta DpCount
call ClearData2
lda #0
sta PointZ
call Multiplation
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
GetXXX:
;;;clear Z data
lda #OperandZ
sta Addr1
lda #Length_Z
sta DpCount
call ClearData2
lda #0
sta PointZ
sta SignZ
;;;X^2*X^n
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
call Multiplation
ret
;=======================================
Xdata:
Pdata::
DB 02h,17h,45h,32h,92h,51h,99h,43h,30h ;;;(Pi/180)
SinData:
DB 0dh,76h,47h,16h,37h,31h,81h,98h,16h ;;;(1/15!)
DB 0ah,16h,05h,90h,43h,83h,68h,21h,61h
DB 08h,25h,05h,21h,08h,38h,54h,41h,71h
DB 06h,27h,55h,73h,19h,22h,39h,85h,89h
DB 04h,19h,84h,12h,69h,84h,12h,69h,84h
DB 03h,83h,33h,33h,33h,33h,33h,33h,33h ;;(1/5!)
DB 01h,16h,66h,66h,66h,66h,66h,66h,66h ;;(1/3!)
CosData:
DB 0bh,11h,47h,07h,45h,59h,77h,29h,72h
DB 09h,20h,87h,67h,56h,98h,78h,68h,09h
DB 07h,27h,55h,73h,19h,22h,39h,85h,89h
DB 05h,24h,80h,15h,87h,30h,15h,87h,30h
DB 03h,13h,88h,88h,88h,88h,88h,88h,88h
DB 02h,41h,66h,66h,66h,66h,66h,66h,66h
DB 01h,50h,00h,00h,00h,00h,00h,00h,00h
TanXAddY:
DB 00h,00h,00h,00h,00h,00h,00h,00h,00h ;;y0
DB 01h,10h,03h,34h,67h,20h,85h,45h,05h ;;;,0ch ;;Y1
DB 01h,20h,27h,10h,03h,55h,08h,67h,24h ;;0ch ;;Y2
DB 01h,30h,93h,36h,24h,96h,09h,62h,32h ;;0ch ;;Y3
DB 01h,42h,27h,93h,21h,87h,38h,16h,17h ;;0ch ;;Y4
DB 01h,54h,63h,02h,48h,98h,43h,79h,05h ;;0ch ;;Y5
DB 01h,68h,41h,36h,80h,83h,41h,69h,23h ;;0ch ;;Y6
DB 01h,84h,22h,88h,38h,04h,63h,07h,94h ;;0ch ;;Y7
DB 00h,10h,29h,63h,85h,57h,05h,03h,64h ;;0bh ;;Y8
DB 00h,12h,60h,15h,82h,17h,55h,03h,39h ;;0bh ;;Y9
;;;X+Y
DB 00h,15h,57h,40h,77h,24h,65h,49h,02h ;;0bh ;;1x+Y0
DB 00h,16h,57h,74h,23h,96h,74h,03h,52h ;;0bh ;;X+Y1
DB 00h,17h,60h,11h,77h,60h,16h,35h,74h ;;0bh ;;X+Y2
DB 00h,18h,66h,74h,39h,74h,26h,45h,25h ;;0bh ;;X+Y3
DB 00h,19h,80h,20h,09h,43h,39h,30h,63h ;;0bh ;;X+Y4
DB 00h,21h,03h,71h,02h,14h,49h,86h,92h ;;0bh ;;X+Y5
DB 00h,22h,41h,54h,45h,32h,99h,65h,94h ;;0bh ;;X+Y6
DB 00h,23h,99h,69h,61h,05h,11h,79h,81h ;;0bh ;;X+Y7
DB 00h,25h,87h,04h,62h,81h,70h,52h,66h ;;0bh ;;X+Y8
DB 00h,28h,17h,56h,59h,42h,20h,52h,41h ;;0bh ;;X+Y9
TanXMulY:
DB 00h,00h,00h,00h,00h,00h,00h,00h,00h
DB 01h,84h,37h,38h,00h,66h,43h,40h,27h ;;0ch
DB 01h,68h,42h,97h,82h,48h,33h,72h,39h ;;0ch
DB 01h,51h,82h,37h,33h,53h,42h,19h,57h ;;0ch
DB 01h,34h,15h,38h,57h,52h,05h,47h,71h ;;0ch
DB 01h,14h,91h,84h,28h,23h,19h,07h,43h ;;0ch
DB 01h,06h,54h,79h,95h,00h,32h,10h,19h ;;0ch
DB 01h,31h,17h,86h,43h,01h,20h,26h,71h ;;0ch
DB 01h,60h,35h,67h,04h,23h,52h,76h,41h ;;0ch
DB 01h,96h,25h,80h,14h,23h,00h,25h,09h ;;0ch
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
EX_UP_CHK:
DB 0feh,23h,02h,58h,50h,93h,00h,00h,00h
EX_DOWN_CHK:
DB 0feh,22h,79h,60h,00h,00h,00h,00h,00h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Ex::
;;;check input data
call ClearBuffer
lda #BufferXn
sta Addr1
call ClearData
lda #BufferTan
sta Addr1
call ClearData
lda #0
sta PointXn
sta PointT
sta SignXn
sta SignT
;;;;------------------------------tom add 2002.03.22 svae input data to BufferXn
lda #OperandX
sta Addr1
lda #BufferXn
sta Addr2
call CopyData
lda PointX
sta PointXn
lda SignX
sta SignXn
;;;;------------------------------end 2002.03.22
lda #OperandX
sta Addr1
call CheckData
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;edit tom 2002.04.01
lda DpCount
sta SignTemp
adda #0
brz Input0
;suba PointX
;brnc 1$
;cmpe #04h
;brc InputErr
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;old data
lda #OperandY
sta Addr1
call ClearData
lda SignX
adda #0
brnz 2$
lda #^EX_UP_CHK ;;;Get UP CHECK data
sta TableC+2
lda #@EX_UP_CHK
sta TableC+1
lda #<EX_UP_CHK
sta TableC
lda #0
sta Temp2
call GetData
lda #0
sta Temp2
sta SignY
br 3$
2$:
lda #^EX_DOWN_CHK ;;;Get DOWN CHECK data
sta TableC+2
lda #@EX_DOWN_CHK
sta TableC+1
lda #<EX_DOWN_CHK
sta TableC
lda #0
sta Temp2
call GetData
lda #0
sta SignY
sta SignX ;golden 2002/3/28
3$:
;;;;---------------------------------edit by tom 2002.03.22
call Subtration
lda SignZ
adda #0
brnz 100$
lda SignXn
adda #0
brz InputErr
br ExInput0
100$:
;;-------------------------------move inputer data to operandX
lda #BufferXn
sta Addr1
lda #OperandX
sta Addr2
call CopyData
lda PointXn
sta PointX
lda SignXn
sta SignX
;; call Chk1
; lda #OperandX
; sta Addr1
; lda #OperandY
; sta Addr2
; lda #Length
; sta DpCount
; call CompareData
; lda SignX
; adda #0
; brz 4$
; lda Temp1
; cmpe #01h
; brz ExInput0
; br 1$
;4$:
; lda Temp1
; cmpe #01h
; brz InputErr
;;;;---------------------------------end edit 2002.03.22
1$:
call ClearBuffer
;;;;---------------------------------edit by tom 2002.03.22
; lda #BufferXn
; sta Addr1
; call ClearData
; lda #0
; sta PointXn
; sta SignXn
;;save X to BufferXn
; lda #OperandX
; sta Addr1
; lda #BufferXn
; sta Addr2
; call CopyData
; lda PointX
; sta PointXn
; lda SignX
; sta SignXn
;;;;---------------------------------end edit 2002.03.22
lda #0
sta SignX
lda #10h
sta BufferZ
lda #Length_Z
deca
sta PointBz
ExLoop:
lda SignTemp
adda #0
brz EndEx
lda #BufferXn
adda #Length
deca
sta r_dp
lda i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -