
                            prime number generator using the sieve of eratosthenes
                            converted to ibm 650 floating poing interpretive system (is)

                            uses two extra o2 codes: o2=800 (set lbox) and o2=453 (tr zero)

                            warning: comments are allowed past column 28 but some characters 
                            are forbidden: uppercase letters, question mark, if these chars 
                            are used, the line (i.e. the card for this line) will be interpreted 
                            as a load card, and interpreter will crash on trying to execute it.
                           
                            interpretive system syntax               c-like equivalent sytax

      100 -9 000 201 400    initp -move        i1    prime           initp: prime[c]=1
      101 +0 001 050 100           loop  c     050   initp                  c++; if c<50 goto initp

      102 +9 000 201 300           move        i1    num                    num=1

      103 +1 300 201 300    loop1  add   num   i1    num             loop1: num++

      104 +2 300 203 000           sub   num   i50   last 
      105 +0 201 120 106           tr    sgn   loope cont                   if num >= 50 goto loope 

      106 +0 800 002 300           set   lbox  b     num                    b=num
      107 -9 000 400 000          -move        prime last                   last=prime[b]
      108 +0 453 103 110           tr    zero  loop1 cont                   if last = 0 goto loop1

      110 +9 000 300 301           move        num   mult                   mult=num

      111 +1 300 301 301    loop2  add   num   mult  mult            loop2: mult=mult+num

      112 +2 301 203 000           sub   mult  i50   last
      113 +0 201 103 114           tr    sgn   loop1 cont                   if mult >= 50 goto loop1 // tr to b if +, go to c if -

      114 +0 800 003 301           set   lbox  c     mult                   c=mult
      115 -9 000 200 400          -move        zero  prime                  prime[c]=0

      116 +0 203 000 111           tr                loop2                  goto loop2

      120 +9 000 201 300    loope  move        i1    num             loope: num=1
      121 +0 800 002 202           set   lbox  b     i2                     b=2
                     
      122 +1 300 201 300    prt1   add   num   i1    num              prt1: num++

      123 -9 000 400 000          -move        prime last                   last=prime[b]
      124 +0 453 127 126           tr    zero  prt2  cont                   if last = 0 goto prt2

      126 +0 410 300 300           pch         num   num                    punch num

      127 +0 010 050 122    prt2  loop   b     050   prt1             prt2: b++; if b<50 goto prt1

      128 +0 000 000 000           unc   stop                               end

                            constants
                             
      200 +0 0000000 50     zero
      201 +1 0000000 50     i1
      202 +2 0000000 50     i2
      203 +5 0000000 51     i50

                            variables

      300 +0 0000000 50     num        current number to check for being prime
      301 +0 0000000 50     mult       multiple
      400 +0 0000000 50     prime      array of numbers 400-449

      100                   program start address

