/* stack.c - check stack depth on Hades Mips R3051 * */ #define ADDR 0x00000400 int sum_recursive( int value ) { int* ptr; ptr = (int*) ADDR; if (value == 0) { *ptr = 0; return 0; } else { *(ptr+value) = value; return value + sum_recursive( value-1 ); } } int main( void ) { int i; int * ptr; // uncomment to initialize frame-pointer and stack-pointer // to user-specified locations: // register int l asm ("$29") = 0x0000ea00; // register int m asm ("$30") = 0x0000ea00; ptr = (int*) ADDR; *(ptr-4) = 0xcafe0001; i = sum_recursive( 15 ); *(ptr-8) = 0xcafe0002; i = sum_recursive( 37 ); *(ptr-12) = 0xcafe0003; i = sum_recursive( 876 ); *(ptr-16) = 0xcafe0004; i = sum_recursive( 4097 ); *(ptr-20) = 0xcafe0004; for( i=0; ; i++ ) { *ptr = i; } }