⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trigonom.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 5 页
字号:

        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 + -