1: ldfps = 170100^tst 2: stfps = 170200^tst 3: / 4: .globl sin, _sin 5: .globl cos, _cos 6: / 7: / floating point sin/cos 8: / replaces the value in fr0 by its sin/cos 9: / there are no error exits 10: / coefficients are #3370 from Hart & Cheney 11: / 12: _sin: 13: mov r5,-(sp) 14: mov sp,r5 15: movf 4(r5),fr0 16: jsr pc,sin 17: br 1f 18: 19: _cos: 20: mov r5,-(sp) 21: mov sp,r5 22: movf 4(r5),fr0 23: jsr pc,cos 24: 1: 25: mov (sp)+,r5 26: rts pc 27: 28: cos: 29: absf fr0 30: mov $1,-(sp) 31: br 1f 32: sin: 33: clr -(sp) 34: 1: 35: stfps -(sp) 36: ldfps $200 37: movf fr1,-(sp) 38: movf fr2,-(sp) 39: mov r0,-(sp) 40: / 41: / quadrant reduction - arg = (2/J)x 42: / -1 < arg < 1 43: / 44: movf fr0,-(sp) 45: absf fr0 46: modf frpi2,fr0 47: modf $fourth,fr1 48: mulf $four,fr1 49: movfi fr1,r0 50: add 34(sp),r0 51: movf $one,fr1 52: inc r0 53: ror r0 54: bcs 1f 55: subf $one,fr0 56: 1: 57: ror r0 58: bcc 1f 59: negf fr0 60: 1: 61: tstf (sp)+ 62: cfcc 63: bpl 1f 64: negf fr0 65: 1: 66: movf fr0,fr1 67: mulf fr0,fr1 /arg^2 68: / 69: movf p4,fr2 70: mulf fr1,fr2 71: addf p3,fr2 72: mulf fr1,fr2 73: addf p2,fr2 74: mulf fr1,fr2 75: addf p1,fr2 76: mulf fr1,fr2 77: addf p0,fr2 78: mulf fr2,fr0 / zP(z^2) 79: / 80: movf fr1,fr2 81: addf q3,fr2 82: mulf fr1,fr2 83: addf q2,fr2 84: mulf fr1,fr2 85: addf q1,fr2 86: mulf fr1,fr2 87: addf q0,fr2 / Q(z^2) 88: / 89: divf fr2,fr0 / zP(z^2)/Q(z^2) 90: / 91: mov (sp)+,r0 92: movf (sp)+,fr2 93: movf (sp)+,fr1 94: ldfps (sp)+ 95: tst (sp)+ 96: / clc /tst clears carry 97: rts pc 98: / 99: fourth = 37600 100: one = 40200 101: four = 40600 102: / 103: .data 104: frpi2: 40042;174603; 67116; 42025 105: / 106: p0: 046117;031130;175220;165273 107: p1: 145626;154170;031651;104637 108: p2: 044726;162341;133224;052302 109: p3: 143530;056427;005061;125021 110: p4: 042021;174005;170441;175607 111: q0: 046003;163716;123445;167144 112: q1: 044707;047147;032436;120046 113: q2: 043423;156142;064161;007314 114: q3: 042004;123513;026637;160477 115: / 116: /p0 = .13578 84097 87737 56690 92680 d8 117: /p1 = -.49429 08100 90284 41611 58627 d7 118: /p2 = .44010 30535 37526 65019 44918 d6 119: /p3 = -.13847 27249 98245 28730 54457 d5 120: /p4 = .14596 88406 66576 87222 26959 d3 121: /q0 = .86445 58652 92253 44299 15149 d7 122: /q1 = .40817 92252 34329 97493 95779 d6 123: /q2 = .94630 96101 53820 81805 71257 d4 124: /q3 = .13265 34908 78613 63589 11494 d3 125: /q4 = .1 d1