getmemsize.c 630 Bytes
#include "osint.h"

u32 osGetMemSize(void)
{
  volatile u32 *memory;
  u32 memsize = 0x00400000;
  u32 org_data, org_data2;
  
  while(memsize < 0x00800000){
    memory    = (u32 *)(0xA0000000L + memsize);
    org_data  = memory[0x00000];
    org_data2 = memory[0x3ffff];
    memory[0x00000] =  memory[0x00000] ^ 0xffffffff;
    memory[0x3ffff] =  memory[0x3ffff] ^ 0xffffffff;
    if ((memory[0x00000] !=  (org_data ^ 0xffffffff)) ||
	(memory[0x3ffff] != (org_data2 ^ 0xffffffff))){
      return memsize;
    }
    memory[0x00000] = org_data;
    memory[0x3ffff] = org_data2;
    memsize  += 0x00100000;
  }
  return memsize;
}