From CloudModding OoT Wiki

The CRC is a special value used to verify the rom's data.

How it works

On system boot, the rom performs a calculation that I don't understand. It checks the state of 0x100000 bytes, starting at 0x1000 into the rom. Because of this, the CRC must be recalculated and written to the makerom header whenever the following files are modified:

Example C# Code

public static void Write(Stream sw)
{
    uint[] crc = new uint[2];
    byte[] data = new byte[0x00101000];
    
    uint d, r, t1, t2, t3, t4, t5, t6 = 0xDF26F436;

    t1 = t2 = t3 = t4 = t5 = t6;

    sw.Position = 0; 
    sw.Read(data, 0, 0x00101000);

    for (int i = 0x00001000; i < 0x00101000; i += 4)
    {
        d = (uint)((data[i] << 24) | (data[i + 1] << 16) | (data[i + 2] << 8) | data[i + 3]);
        if ((t6 + d) < t6) t4++;
        t6 += d;
        t3 ^= d;
        r = (d << (int)(d & 0x1F)) | (d >> (32 - (int)(d & 0x1F)));
        t5 += r;
        if (t2 > d) t2 ^= r;
        else t2 ^= t6 ^ d;
        t1 += (uint)((data[0x00000750 + (i & 0xFF)] << 24) | (data[0x00000751 + (i & 0xFF)] << 16) |
              (data[0x00000752 + (i & 0xFF)] << 8) | data[0x00000753 + (i & 0xFF)]) ^ d;
    }
    crc[0] = t6 ^ t4 ^ t3;
    crc[1] = t5 ^ t2 ^ t1;

    if (BitConverter.IsLittleEndian)
    {
        crc[0] = (crc[0] >> 24) | ((crc[0] >> 8) & 0xFF00) | ((crc[0] << 8) & 0xFF0000) | ((crc[0] << 24) & 0xFF000000);
        crc[1] = (crc[1] >> 24) | ((crc[1] >> 8) & 0xFF00) | ((crc[1] << 8) & 0xFF0000) | ((crc[1] << 24) & 0xFF000000);
    }
    
    //Seek to 0x10 from rom start
    sw.Position = 0x10;
    BinaryWriter br = new BinaryWriter(sw);
    br.Write(crc[0]);
    br.Write(crc[1]);
}