|
|
1.1 ! root 1: / ! 2: / floating point for 11/40 or 11/03 only ! 3: / modified from rhflibp.asm by DEPT 2242 BTL WH ! 4: / 06-JUN-78 ! 5: / ! 6: / 11/70 floating point removed ! 7: / ! 8: / The test: ! 9: / ! 10: / mov sp,-(sp) ! 11: / sub sp,(sp) ! 12: / tst (sp)+ ! 13: / bne 11/70 ! 14: / ! 15: / does NOT WORK on the LSI-11 (PDP-11/03) ! 16: / ! 17: .globl fad,fsb,fmp,fdv,int,float,fltused ! 18: ! 19: .text ! 20: fltused: 1 / used to satisfy c compile reference when floating ! 21: / point is used ! 22: fad: mov (sp)+,ret ! 23: 075006 / fadd sp on 11/35/40/03 ! 24: jmp *ret ! 25: ! 26: fsb: mov (sp)+,ret ! 27: 075016 / fsub sp on 11/35/40/03 ! 28: jmp *ret ! 29: ! 30: fmp: mov (sp)+,ret ! 31: 075026 / fmul sp on 11/35/40/03 ! 32: jmp *ret ! 33: ! 34: fdv: mov (sp)+,ret ! 35: 075036 / fdiv sp on 11/35/40/03 ! 36: jmp *ret ! 37: / ! 38: / ! 39: / ! 40: / ! 41: int: mov r0,-(sp) ! 42: mov r1,-(sp) ! 43: mov r2,-(sp) ! 44: clr -(sp) /sign of number ! 45: mov 12.(sp),r1 / low part ! 46: mov 10.(sp),r0 / hi part ! 47: bpl 1f / ok, positive ! 48: mov $100000,(sp) / set sign - ! 49: bic (sp),r0 / set number pos ! 50: 1: mov r0,r2 / extract exponent ! 51: bic $100177,r2 ! 52: bic r2,r0 ! 53: ash $-7,r2 / make it integer ! 54: bis $200,r0 / set hidden bit ! 55: sub $200,r2 / subtr off excess 200 ! 56: ble 2f / exponent 0, treat as zero number ! 57: sub $24.,r2 / set for shift ! 58: ashc r2,r0 / left or right ! 59: 4: tst (sp)+ / sign ! 60: bpl 3f ! 61: neg r0 ! 62: neg r1 ! 63: sbc r0 ! 64: 3: mov r0,8.(sp) / hi part ! 65: mov r1,10.(sp) / low part ! 66: mov (sp)+,r2 ! 67: mov (sp)+,r1 ! 68: mov (sp)+,r0 ! 69: rts pc ! 70: ! 71: 2: clr r0 / exponent was 0, set number to 0 ! 72: clr r1 ! 73: br 4b ! 74: / ! 75: / ! 76: / ! 77: / ! 78: float: mov 4(sp),-(sp) ! 79: mov 4(sp),-(sp) ! 80: bmi negflt ! 81: clr -(sp) ! 82: mov $[200+24.]*200,-(sp) ! 83: 1: bit $377*200,4(sp) ! 84: beq 2f ! 85: asr 4(sp) ! 86: ror 6(sp) ! 87: add $200,(sp) ! 88: br 1b ! 89: 2: bis (sp),4(sp) ! 90: jsr pc,fsb ! 91: mov (sp)+,4(sp) ! 92: mov (sp)+,4(sp) ! 93: rts pc ! 94: ! 95: negflt: neg (sp) ! 96: neg 2(sp) ! 97: sbc (sp) ! 98: bmi 3f / overflow on sign flip ! 99: jsr pc,float ! 100: bis $100000,(sp) ! 101: mov (sp)+,4(sp) ! 102: mov (sp)+,4(sp) ! 103: rts pc ! 104: ! 105: 3: cmp (sp)+,(sp)+ / toss ! 106: mov $[200+32.]*200+100000,2(sp) / ! 107: clr 4(sp) ! 108: rts pc ! 109: ! 110: .data ! 111: ret:0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.