#include "global.h"

#define STEP 0x100000

u32 osGetMemSize(void) {
    u32* ptr;
    u32 size;
    u32 data0;
    u32 data1;

    size = 0x400000;

    while (size < 0x800000) {
        ptr = (u32*)(0xA0000000 + size);

        data0 = *ptr;
        data1 = ptr[STEP / 4 - 1];

        *ptr ^= ~0;
        ptr[STEP / 4 - 1] ^= ~0;

        if ((*ptr != (data0 ^ ~0)) || (ptr[STEP / 4 - 1] != (data1 ^ ~0))) {
            return size;
        }

        *ptr = data0;
        ptr[STEP / 4 - 1] = data1;

        size += STEP;
    }

    return size;
}
