| 1 | ldfps = 170100^tst |
| 2 | / |
| 3 | ldfps $240 |
| 4 | |
| 5 | clr argflg |
| 6 | cmp (sp)+,$2 |
| 7 | blt begin |
| 8 | tst (sp)+ |
| 9 | mov (sp),r2 |
| 10 | jsr r5,atof; getch1 |
| 11 | inc argflg |
| 12 | br begin1 |
| 13 | begin: |
| 14 | tst argflg |
| 15 | beq 9f; sys exit; 9: |
| 16 | jsr r5,atof; getch |
| 17 | begin1: |
| 18 | tstf fr0 |
| 19 | cfcc |
| 20 | bpl 9f; jmp ouch; 9: |
| 21 | bne 9f; sys exit; 9: |
| 22 | cmpf big,fr0 |
| 23 | cfcc |
| 24 | bgt 9f; jmp ouch; 9: |
| 25 | / |
| 26 | movf $f100,fr1 |
| 27 | cmpf fr0,fr1 |
| 28 | cfcc |
| 29 | bge 1f |
| 30 | mov $pt,r3 |
| 31 | 3: |
| 32 | cmp r3,$ptend |
| 33 | bhis 1f |
| 34 | movif (r3)+,fr1 |
| 35 | cmpf fr1,fr0 |
| 36 | cfcc |
| 37 | blt 3b |
| 38 | tst -(r3) |
| 39 | 3: |
| 40 | movif (r3),fr0 |
| 41 | jsr r5,ftoa; wrchar |
| 42 | mov $'\n,r0 |
| 43 | jsr r5,wrchar |
| 44 | tst (r3)+ |
| 45 | cmp r3,$ptend |
| 46 | blo 3b |
| 47 | movf $f100,fr0 |
| 48 | / |
| 49 | 1: |
| 50 | divf $two,fr0 |
| 51 | modf $one,fr0 |
| 52 | movf fr1,fr0 |
| 53 | mulf $two,fr0 |
| 54 | addf $one,fr0 |
| 55 | movif $tsiz8,fr1 |
| 56 | movf fr1,fr5 |
| 57 | movf fr0,nn |
| 58 | / |
| 59 | / |
| 60 | / |
| 61 | / clear the sieve table |
| 62 | / |
| 63 | 2: |
| 64 | mov $table,r3 |
| 65 | 3: |
| 66 | cmp r3,$table+tabsiz |
| 67 | bhis 3f |
| 68 | clrb (r3)+ |
| 69 | br 3b |
| 70 | / |
| 71 | / run the sieve |
| 72 | / |
| 73 | 3: |
| 74 | movf nn,fr0 |
| 75 | addf fr5,fr0 |
| 76 | jsr r5,sqrt |
| 77 | movf fr0,v |
| 78 | / |
| 79 | movf nn,fr0 |
| 80 | movif $3.,fr1 |
| 81 | jsr pc,5f |
| 82 | movif $5.,fr1 |
| 83 | jsr pc,5f |
| 84 | movif $7.,fr1 |
| 85 | jsr pc,5f |
| 86 | movif $11.,fr1 |
| 87 | mov $factab+2,r4 |
| 88 | 4: |
| 89 | jsr pc,5f |
| 90 | mov (r4)+,kazoo |
| 91 | kazoo =.+2 |
| 92 | addf $kazoo,fr1 |
| 93 | cmp r4,$ftabend |
| 94 | blo 3f |
| 95 | mov $factab,r4 |
| 96 | 3: |
| 97 | cmpf v,fr1 |
| 98 | cfcc |
| 99 | bge 4b |
| 100 | br 1f |
| 101 | / |
| 102 | / |
| 103 | 5: |
| 104 | movf fr0,fr2 |
| 105 | divf fr1,fr2 |
| 106 | modf $one,fr2 |
| 107 | mulf fr1,fr3 |
| 108 | subf fr0,fr3 |
| 109 | cfcc |
| 110 | bpl 3f |
| 111 | addf fr1,fr3 |
| 112 | 3: |
| 113 | cmpf fr5,fr3 |
| 114 | cfcc |
| 115 | ble 3f |
| 116 | movfi fr3,r0 |
| 117 | ashc $-3.,r0 |
| 118 | ash $-13.,r1 |
| 119 | bic $177770,r1 |
| 120 | bisb bittab(r1),table(r0) |
| 121 | addf fr1,fr3 |
| 122 | br 3b |
| 123 | 3: |
| 124 | rts pc |
| 125 | / |
| 126 | / |
| 127 | / get one character form the argument string. |
| 128 | getch1: |
| 129 | movb (r2)+,r0 |
| 130 | rts r5 |
| 131 | / |
| 132 | / now get the primes from the table |
| 133 | / and print them. |
| 134 | / |
| 135 | 1: |
| 136 | / |
| 137 | movf nn,fr0 |
| 138 | clr r3 |
| 139 | br 4f |
| 140 | / |
| 141 | 1: |
| 142 | inc r3 |
| 143 | inc r3 |
| 144 | cmp r3,$tsiz8 |
| 145 | bge 2b |
| 146 | / |
| 147 | 4: |
| 148 | / |
| 149 | jsr pc,prime |
| 150 | bec 3f |
| 151 | movf nn,fr0 |
| 152 | jsr r5,ftoa; wrchar |
| 153 | mov $'\n,r0 |
| 154 | jsr r5,wrchar |
| 155 | 3: |
| 156 | movf nn,fr0 |
| 157 | addf $two,fr0 |
| 158 | movf fr0,nn |
| 159 | br 1b |
| 160 | / |
| 161 | / |
| 162 | / |
| 163 | / |
| 164 | prime: |
| 165 | mov r3,r4 |
| 166 | ashc $-3.,r4 |
| 167 | ash $-13.,r5 |
| 168 | bic $177770,r5 |
| 169 | bitb bittab(r5),table(r4) |
| 170 | bne 1f |
| 171 | sec |
| 172 | 1: |
| 173 | rts pc |
| 174 | / |
| 175 | / |
| 176 | / |
| 177 | / |
| 178 | one = 40200 |
| 179 | half = 40000 |
| 180 | opower = 34400 |
| 181 | power = 44000 |
| 182 | f100 = 41710 |
| 183 | / |
| 184 | / get one character from the console. |
| 185 | / called from atof. |
| 186 | / |
| 187 | getch: |
| 188 | clr r0 |
| 189 | sys read; ch; 1 |
| 190 | bec 9f; sys exit; 9: |
| 191 | tst r0; bne 9f; sys exit; 9: |
| 192 | mov ch,r0 |
| 193 | rts r5 |
| 194 | / |
| 195 | / |
| 196 | / write one character on the console |
| 197 | / called from ftoa. |
| 198 | / |
| 199 | wrchar: |
| 200 | tst iobuf |
| 201 | bne 1f |
| 202 | mov $iobuf+2,iobuf |
| 203 | 1: |
| 204 | movb r0,*iobuf |
| 205 | inc iobuf |
| 206 | cmp iobuf,$iobuf+514. |
| 207 | blo 1f |
| 208 | mov $1,r0 |
| 209 | sys write; iobuf+2; 512. |
| 210 | mov $iobuf+2,iobuf |
| 211 | 1: |
| 212 | rts r5 |
| 213 | / |
| 214 | .bss |
| 215 | iobuf: .=.+518. |
| 216 | .text |
| 217 | / |
| 218 | / |
| 219 | / read and convert a line from the console into fr0. |
| 220 | / |
| 221 | atof: |
| 222 | mov r1,-(sp) |
| 223 | movif $10.,r3 |
| 224 | clrf r0 |
| 225 | 1: |
| 226 | jsr r5,*(r5) |
| 227 | sub $'0,r0 |
| 228 | cmp r0,$9. |
| 229 | bhi 2f |
| 230 | mulf r3,r0 |
| 231 | movif r0,r1 |
| 232 | addf r1,r0 |
| 233 | br 1b |
| 234 | 2: |
| 235 | cmp r0,$' -'0 |
| 236 | beq 1b |
| 237 | / |
| 238 | mov (sp)+,r1 |
| 239 | tst (r5)+ |
| 240 | rts r5 |
| 241 | / |
| 242 | / |
| 243 | ftoa: |
| 244 | mov $ebuf,r2 |
| 245 | 1: |
| 246 | movf fr0,fr1 |
| 247 | divf $ten,fr1 |
| 248 | movf fr1,fr2 |
| 249 | modf $one,fr2 |
| 250 | movf fr3,-(sp) |
| 251 | mulf $ten,fr3 |
| 252 | negf fr3 |
| 253 | addf fr0,fr3 |
| 254 | movfi fr3,-(r2) |
| 255 | movf (sp)+,fr0 |
| 256 | tstf fr0 |
| 257 | cfcc |
| 258 | bne 1b |
| 259 | 1: |
| 260 | mov (r2)+,r0 |
| 261 | add $60,r0 |
| 262 | jsr r5,*(r5) |
| 263 | cmp r2,$ebuf |
| 264 | blo 1b |
| 265 | tst (r5)+ |
| 266 | rts r5 |
| 267 | / |
| 268 | / |
| 269 | / |
| 270 | / replace the f.p. number in fr0 by its square root |
| 271 | / |
| 272 | sqrt: |
| 273 | movf r0,r1 / a |
| 274 | tstf fr0 |
| 275 | cfcc |
| 276 | beq 2f |
| 277 | bgt 1f |
| 278 | sec |
| 279 | rts r5 / sqrt(-a) |
| 280 | 1: |
| 281 | seti |
| 282 | movf fr0,-(sp) |
| 283 | asr (sp) |
| 284 | add $20100,(sp) |
| 285 | movf (sp)+,fr0 |
| 286 | movif $2,r3 / constant 2 |
| 287 | mov $4,r0 |
| 288 | 1: |
| 289 | movf r1,r2 |
| 290 | divf r0,r2 |
| 291 | addf r2,r0 |
| 292 | divf r3,r0 / x = (x+a/x)/2 |
| 293 | dec r0 |
| 294 | bgt 1b |
| 295 | 2: |
| 296 | clc |
| 297 | rts r5 |
| 298 | / |
| 299 | / |
| 300 | buf: .=.+38. |
| 301 | ebuf: |
| 302 | / |
| 303 | / |
| 304 | / |
| 305 | / complain about a number which the program |
| 306 | / is unable to digest |
| 307 | ouch: |
| 308 | mov $2,r0 |
| 309 | sys write; 1f; 2f-1f |
| 310 | jmp begin |
| 311 | / |
| 312 | 1: <Ouch.\n> |
| 313 | 2: .even |
| 314 | / |
| 315 | / |
| 316 | one = 40200 |
| 317 | two = 40400 |
| 318 | four = 40600 |
| 319 | six = 40700 |
| 320 | ten = 41040 |
| 321 | / |
| 322 | .data |
| 323 | bittab: .byte 1, 2, 4, 10, 20, 40, 100, 200 |
| 324 | big: 056177; 177777; 177777; 177777 |
| 325 | / |
| 326 | pt: 2.; 3.; 5.; 7.; 11.; 13.; 17.; 19.; 23.; 29.; 31.; 37.; 41.; 43. |
| 327 | 47.; 53.; 59.; 61.; 67.; 71.; 73.; 79.; 83.; 89.; 97. |
| 328 | ptend: |
| 329 | nl: <\n> |
| 330 | sp5: < > |
| 331 | .even |
| 332 | / |
| 333 | / |
| 334 | factab: |
| 335 | 41040; 40400; 40600; 40400; 40600; 40700; 40400; 40700 |
| 336 | 40600; 40400; 40600; 40700; 40700; 40400; 40700; 40600 |
| 337 | 40400; 40700; 40600; 40700; 41000; 40600; 40400; 40600 |
| 338 | 40400; 40600; 41000; 40700; 40600; 40700; 40400; 40600 |
| 339 | 40700; 40400; 40700; 40700; 40600; 40400; 40600; 40700 |
| 340 | 40400; 40700; 40600; 40400; 40600; 40400; 41040; 40400 |
| 341 | ftabend: |
| 342 | / |
| 343 | .bss |
| 344 | ch: .=.+2 |
| 345 | t: .=.+8 |
| 346 | n: .=.+8 |
| 347 | v: .=.+8 |
| 348 | nn: .=.+8 |
| 349 | place: .=.+8 |
| 350 | / |
| 351 | tabsiz = 1000. |
| 352 | tsiz8 = 8000. |
| 353 | table: .=.+tabsiz |
| 354 | argflg: .=.+2 |
| 355 | .text |