|  | File: convert.t2
For general comments see here 
| Line | Address | Object Code | Label | F1 | N1 | B | F2 | N2 | Comments | Check | 
|---|
 | 1 | 0 |  | ; convert.t2 |  |  | 2 | 0 |  | ;-------------------------------------------------------------------- |  |  | 3 | 0 |  | ; flpt->integer conversions, round is called by int := flpt |  |  | 4 | 0 |  | ;  while entier is standard procedure |  |  | 5 | 0 |  | ;   difference is round rounds to nearest integer, entier rounds towards down |  |  | 6 | 0 |  | =6899 |  |  |  | 7 | 6899 |  | Round:: | ; |  |  |  | 8 | 6899 |  | Round: | ; |  |  |  | 9 | 6899 | 1415132 |  | fad | FP0.5 |  |  |  | ;add 0.5 for rounding | @6899 |  | 10 | 6899+ |  | Entier: | ; |  |  |  | 11 | 6899+ | 0400015 |  | sto | Link1 |  |  |  | ;save value |  |  | 12 | 6900 | 0075133 |  | and | W6747 |  |  |  | ;=511 mask off exponent | @6900 |  | 13 | 6900+ | 0560015 |  | o27 | Link1 |  |  |  | ;remove from value |  |  | 14 | 6901 | 0135134 |  | sub | W6748 |  |  |  | ;=257 | @6901 |  | 15 | 6901+ | 1135370 |  | jn | .1 |  |  |  | ;got to be less than 1.0 |  |  | 16 | 6902 | 0175135 |  | bus | W6749 |  |  |  | ;=36 | @6902 |  | 17 | 6902+ | 1020013 |  | jn | IntOflo |  |  |  | ;will overflow integer range |  |  | 18 | 6903 | 1000067200001 |  | exa | Link1 | / | sra | 1 | ;ok, shift right by exp | @6903 |  | 19 | 6904 | 1015212 |  | jmp | CkoRet |  |  |  | ;check oflo and return | @6904 |  | 20 | 6904+ |  | ; |  |  | 21 | 6904+ |  | .1: | ; |  |  |  | 22 | 6904+ | 0600015 |  | lod | Link1 |  |  |  | ;small value, just get sign |  |  | 23 | 6905 | 1200046 |  | sra | 38 |  |  |  | ;shift right to get 0 or -1 | @6905 |  | 24 | 6905+ | 1015212 |  | jmp | CkoRet |  |  |  | ;and return it |  |  | 25 | 6906 |  | ;-------------------------------------------------------------------- |  |  | 26 | 6906 |  | ; divide two integers |  |  | 27 | 6906 |  | ;  problem is that Algol divide doesn't match hardware if either |  |  | 28 | 6906 |  | ;   argument is negative. make both arguments positive, noting |  |  | 29 | 6906 |  | ;    original sign, then adjust result afterwards |  |  | 30 | 6906 |  | ; |  |  | 31 | 6906 |  | Div:: | ; |  |  |  | 32 | 6906 |  | Div: | ; |  |  |  | 33 | 6906 | 0600016 |  | lod | arg1 |  |  |  | ;divisor | @6906 |  | 34 | 6906+ | 1040013 |  | jz | IntOflo |  |  |  | ;trap divide by zero |  |  | 35 | 6907 | 1135374 |  | jn | .1 |  |  |  | ; | @6907 |  | 36 | 6907+ | 0600015 |  | lod | Link1 |  |  |  | ;get dividend |  |  | 37 | 6908 | 1115375 |  | jmp | .2 |  |  |  | ; | @6908 |  | 38 | 6908+ |  | ; |  |  | 39 | 6908+ |  | .1: | ; |  |  |  | 40 | 6908+ | 0420016 |  | stn | arg1 |  |  |  | ;complement divisor |  |  | 41 | 6909 | 0620015 |  | lcs | Link1 |  |  |  | ;complement dividend also | @6909 |  | 42 | 6909+ |  | .2: | ; |  |  |  | 43 | 6909+ | 0020000 |  | neg | 0 |  |  |  | ;complement dividend |  |  | 44 | 6910 | 1135375 |  | jn | .2 |  |  |  | ;make it positive | @6910 |  | 45 | 6910+ | 1200046 |  | sra | 38 |  |  |  | ;shift into AR |  |  | 46 | 6911 | 1340016 |  | div | arg1 |  |  |  | ;divide | @6911 |  | 47 | 6911+ | 0200015 |  | exa | Link1 |  |  |  | ;swap with dividend |  |  | 48 | 6912 | 1135401 |  | jn | .3 |  |  |  | ;negative? | @6912 |  | 49 | 6912+ | 0600015 |  | lod | Link1 |  |  |  | ;no, reload result |  |  | 50 | 6913 | 1015212 |  | jmp | CkoRet |  |  |  | ;and return, checking oflo | @6913 |  | 51 | 6913+ |  | ; |  |  | 52 | 6913+ |  | .3: | ; |  |  |  | 53 | 6913+ | 0220015 |  | o11 | Link1 |  |  |  | ;re-load complement of result |  |  | 54 | 6914 | 1015212 |  | jmp | CkoRet |  |  |  | ;and return that | @6914 |  | 55 | 6914+ |  | ; |  |  | 56 | 6914+ | 0000000 |  | o00 | 0 |  |  |  | ; |  |  | 57 | 6915 |  | ;-------------------------------------------------------------------- |  |  | 58 | 6915 |  | ; IPower, raise number to integer power |  |  | 59 | 6915 |  | ; |  |  | 60 | 6915 |  | IPower:: | ; |  |  |  | 61 | 6915 |  | IPower: | ; |  |  |  | 62 | 6915 | 0600015 |  | lod | Link1 |  |  |  | ;get number | @6915 |  | 63 | 6915+ | 1155423 |  | jz | .7 |  |  |  | ;answer will be zero |  |  | 64 | 6916 | 0555121 |  | cls | W6737 |  |  |  | ;clear flag | @6916 |  | 65 | 6916+ | 1220000 |  | srl | 0 |  |  |  | ;clear AR |  |  | 66 | 6917 | 0615136 |  | lod | FP1.0 |  |  |  | ;initial factor | @6917 |  | 67 | 6917+ | 0415120 |  | sto | W6736 |  |  |  | ;save it |  |  | 68 | 6918 | 0600016 |  | lod | arg1 |  |  |  | ;get power | @6918 |  | 69 | 6918+ | 1155422 |  | jz | .5 |  |  |  | ;zero, return 1.0 |  |  | 70 | 6919 | 1035410 |  | jn | .1 |  |  |  | ;negative, invert | @6919 |  | 71 | 6919+ | 1015411 |  | jmp | .2 |  |  |  | ;positive, normal |  |  | 72 | 6920 |  | ; |  |  | 73 | 6920 |  | .1: | ; |  |  |  | 74 | 6920 | 0455121 |  | inc | W6737 |  |  |  | ;bump flag | @6920 |  | 75 | 6920+ | 0620016 |  | lcs | arg1 |  |  |  | ;complement power |  |  | 76 | 6921 |  | .2: | ; |  |  |  | 77 | 6921 | 0600016 |  | lod | arg1 |  |  |  | ;get power | @6921 |  | 78 | 6921+ | 1200001 |  | sra | 1 |  |  |  | ;divide by 2 |  |  | 79 | 6922 | 0400016 |  | sto | arg1 |  |  |  | ;and save | @6922 |  | 80 | 6922+ | 1360000 |  | ara | 0 |  |  |  | ;get remainder |  |  | 81 | 6923 | 1055415 |  | jz | .3 |  |  |  | ;zero, ignore | @6923 |  | 82 | 6923+ | 0615120 |  | lod | W6736 |  |  |  | ;get factor |  |  | 83 | 6924 | 1460015 |  | fmu | Link1 |  |  |  | ;multiply by number | @6924 |  | 84 | 6924+ | 0415120 |  | sto | W6736 |  |  |  | ;and save |  |  | 85 | 6925 |  | .3: | ; |  |  |  | 86 | 6925 | 0600016 |  | lod | arg1 |  |  |  | ;load power | @6925 |  | 87 | 6925+ | 1055420 |  | jz | .4 |  |  |  | ;zero, finished |  |  | 88 | 6926 | 0600015 |  | lod | Link1 |  |  |  | ;load number | @6926 |  | 89 | 6926+ | 1460015 |  | fmu | Link1 |  |  |  | ;square it |  |  | 90 | 6927 | 0400015 |  | sto | Link1 |  |  |  | ;and save it | @6927 |  | 91 | 6927+ | 1015411 |  | jmp | .2 |  |  |  | ;repeat loop |  |  | 92 | 6928 |  | ; |  |  | 93 | 6928 |  | .4: | ; |  |  |  | 94 | 6928 | 0615121 |  | lod | W6737 |  |  |  | ;finished, test flag | @6928 |  | 95 | 6928+ | 1155422 |  | jz | .5 |  |  |  | ;zero, done |  |  | 96 | 6929 | 0615136 |  | lod | FP1.0 |  |  |  | ;need to take reciprocal | @6929 |  | 97 | 6929+ | 1515120 |  | fdv | W6736 |  |  |  | ;divide 1.0 by result |  |  | 98 | 6930 | 1015423 |  | jmp | .6 |  |  |  | ;and return that | @6930 |  | 99 | 6930+ |  | ; |  |  | 100 | 6930+ |  | .5: | ; |  |  |  | 101 | 6930+ | 0615120 |  | lod | W6736 |  |  |  | ;reload result |  |  | 102 | 6931 |  | .6: | ; |  |  |  | 103 | 6931 | 1015212 |  | jmp | CkoRet |  |  |  | ;and exit, checking overflow | @6931 |  | 104 | 6931+ |  | ; |  |  | 105 | 6931+ |  | .7: | ; |  |  |  | 106 | 6931+ | 0600016 |  | lod | arg1 |  |  |  | ;get power |  |  | 107 | 6932 | 1040013 |  | jz | IntOflo |  |  |  | ;overflow if zero?? | @6932 |  | 108 | 6932+ | 1115370 |  | jmp | Round.1 |  |  |  | ;round |  |  | 109 | 6933 |  | ;-------------------------------------------------------------------- |  |  | 110 | 6933 |  | ; return sign(arg1) -1, 0, +1 |  |  | 111 | 6933 |  | ; |  |  | 112 | 6933 |  | Sign: | ; |  |  |  | 113 | 6933 | 0600016 |  | lod | arg1 |  |  |  | ;get argument | @6933 |  | 114 | 6933+ | 1135427 |  | jn | SignNeg |  |  |  | ;negative, return -1 |  |  | 115 | 6934 | 1040052 |  | jz | retlnk1 |  |  |  | ;zero, return 0 | @6934 |  | 116 | 6934+ | 0040000 |  | o02 | 0 |  |  |  | ;=1 |  |  | 117 | 6935 | 1000052 |  | jmp | retlnk1 |  |  |  | ;positive, return +1 | @6935 |  | 118 | 6935+ |  | ; |  |  | 119 | 6935+ |  | SignNeg: | ; |  |  |  | 120 | 6935+ | 0040000 |  | o02 | 0 |  |  |  | ;=1 |  |  | 121 | 6936 | 0020000 |  | neg | 0 |  |  |  | ;negate it | @6936 |  | 122 | 6936+ | 1000052 |  | jmp | retlnk1 |  |  |  | ;and return |  |  |