/* sieve of Eratosthenes to demonstrate TinyMips in Hades */ #include static int limit; // sieve size static int *sieve; // pointer to the sieve array int main( int argc, char** argv ) { int i; int j; limit = 256; // 16384; sieve = (void*) 0x00000200; // initialization loop for( i=0; i < limit; i++ ) { *(sieve+i) = 0xCCCCCCCC; } // first loop iteration marks all multiples of 2 for( i=4; i < limit; i = i+2 ) { *(sieve+i) = 2; } // next nested loop marks all multiples of 3,5,7,... for( i=3; i < limit; i = i+2 ) { *(sieve-1) = i; for( j=(i+i); j < limit; j = j+i ) { *(sieve+j) = i; } } // endless loop that writes the detected primes to *(sieve-2) for( ;; ) { for( i=0; i < limit; i++ ) { if (*(sieve+i) == 0xCCCCCCCC) { *(sieve-2) = i; } } } }