|
|
1.1 ! root 1: / floating point for 11/40 or 11/70 for norgen use on either machine ! 2: / uses the appropriate floating point unit ! 3: ! 4: .globl fad,fsb,fmp,fdv,int,float ! 5: ! 6: .text ! 7: fad: mov (sp)+,ret ! 8: mov sp,-(sp) ! 9: sub sp,(sp) ! 10: tst (sp)+ ! 11: bne 1f ! 12: 75006 /fadd sp on 11/35/40 ! 13: jmp *ret ! 14: 1: ldfps $1100 ! 15: movf 4(sp),fr0 ! 16: addf (sp)+,fr0 ! 17: movf fr0,(sp) ! 18: jmp *ret ! 19: ! 20: fsb: mov (sp)+,ret ! 21: mov sp,-(sp) ! 22: sub sp,(sp) ! 23: tst (sp)+ ! 24: bne 1f ! 25: 75016 /fsub sp on 11/35/40 ! 26: jmp *ret ! 27: 1: ldfps $1100 ! 28: movf 4(sp),fr0 ! 29: subf (sp)+,fr0 ! 30: movf fr0,(sp) ! 31: jmp *ret ! 32: ! 33: fmp: mov (sp)+,ret ! 34: mov sp,-(sp) ! 35: sub sp,(sp) ! 36: tst (sp)+ ! 37: bne 1f ! 38: 75026 /fmul sp on 11/35/40 ! 39: jmp *ret ! 40: 1: ldfps $1100 ! 41: movf 4(sp),fr0 ! 42: mulf (sp)+,fr0 ! 43: movf fr0,(sp) ! 44: jmp *ret ! 45: ! 46: fdv: mov (sp)+,ret ! 47: mov sp,-(sp) ! 48: sub sp,(sp) ! 49: tst (sp)+ ! 50: bne 1f ! 51: 75036 /fdiv sp on 11/35/40 ! 52: jmp *ret ! 53: 1: ldfps $1100 ! 54: movf 4(sp),fr0 ! 55: divf (sp)+,fr0 ! 56: movf fr0,(sp) ! 57: jmp *ret ! 58: ! 59: int: mov r0,-(sp) ! 60: mov r1,-(sp) ! 61: mov r2,-(sp) ! 62: clr -(sp) /sign of number ! 63: mov 12.(sp),r1/ low part ! 64: mov 10.(sp),r0/ hi part ! 65: bpl 1f/ ok, positive ! 66: mov $100000,(sp)/ set sign - ! 67: bic (sp),r0/ set number pos ! 68: 1: mov r0,r2/ extract exponent ! 69: bic $100177,r2 ! 70: bic r2,r0 ! 71: ash $-7,r2/ make it integer ! 72: bis $200,r0/ set hidden bit ! 73: sub $200,r2/ subtr off excess 200 ! 74: ble 2f/ exponent 0, treat as zero number ! 75: sub $24.,r2/ set for shift ! 76: ashc r2,r0/ left or right ! 77: 4: tst (sp)+/ sign ! 78: bpl 3f ! 79: neg r0 ! 80: neg r1 ! 81: sbc r0 ! 82: 3: mov r0,8.(sp)/ hi part ! 83: mov r1,10.(sp)/ low part ! 84: mov (sp)+,r2 ! 85: mov (sp)+,r1 ! 86: mov (sp)+,r0 ! 87: rts pc ! 88: ! 89: 2: clr r0/ exponent was 0, set number to 0 ! 90: clr r1 ! 91: br 4b ! 92: ! 93: float: mov 4(sp),-(sp) ! 94: mov 4(sp),-(sp) ! 95: bmi negflt ! 96: clr -(sp) ! 97: mov $[200+24.]*200,-(sp) ! 98: 1: bit $377*200,4(sp) ! 99: beq 2f ! 100: asr 4(sp) ! 101: ror 6(sp) ! 102: add $200,(sp) ! 103: br 1b ! 104: 2: bis (sp),4(sp) ! 105: jsr pc,fsb ! 106: mov (sp)+,4(sp) ! 107: mov (sp)+,4(sp) ! 108: rts pc ! 109: ! 110: negflt: neg (sp) ! 111: neg 2(sp) ! 112: sbc (sp) ! 113: bmi 3f/ overflow on sign flip ! 114: jsr pc,float ! 115: bis $100000,(sp) ! 116: mov (sp)+,4(sp) ! 117: mov (sp)+,4(sp) ! 118: rts pc ! 119: ! 120: 3: cmp (sp)+,(sp)+/ toss ! 121: mov $[200+32.]*200+100000,2(sp)/ ! 122: clr 4(sp) ! 123: rts pc ! 124: ! 125: .data ! 126: ret:0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.