예제 #1
0
        private bool IsAsciiString(Rom rom, int start, int length)
        {
            for (int i = start; i < start + length; i++)
            {
                if (rom.Byte(i) < 0x20 || rom.Byte(i) > 0x7E)
                {
                    return(false);
                }
            }

            return(true);
        }
예제 #2
0
        private int GetHiRomScore(Rom rom)
        {
            int score = 0;

            if (rom.Word(0xFFDC) + rom.Word(0xFFDE) == 0xFFFF)
            {
                score += 2;
            }

            if (rom.Byte(0xFFDA) == 0x33)
            {
                score += 2;
            }

            if ((rom.Byte(0xFFD5) & 0xf) < 4)
            {
                score += 2;
            }

            if ((rom.Byte(0xFFFD) & 0x80) == 0)
            {
                score -= 4;
            }

            if ((1 << (rom.Byte(0xFFD7) - 7)) > 48)
            {
                score -= 1;
            }

            if (!IsAsciiString(rom, 0xFFB0, 6))
            {
                score -= 1;
            }

            if (!IsAsciiString(rom, 0xFFC0, 20))
            {
                score -= 1;
            }

            return(score);
        }
예제 #3
0
        private void ReadHeader(Rom rom)
        {
            var startAddress = rom.BankSize - 0x40;

            rom.Header.Title                = rom.String(startAddress, 21);
            rom.Header.Makeup               = RomMakeup.Parse(rom.Byte(startAddress + 0x15));
            rom.Header.Type                 = rom.Byte(startAddress + 0x16);
            rom.Header.RomSize              = rom.Byte(startAddress + 0x17);
            rom.Header.SramSize             = rom.Byte(startAddress + 0x18);
            rom.Header.CreatorLicenseIdCode = rom.Byte(startAddress + 0x19);
            rom.Header.VersionNum           = rom.Byte(startAddress + 0x1B);
            rom.Header.ChecksumComplement   = rom.Word(startAddress + 0x1C);
            rom.Header.Checksum             = rom.Word(startAddress + 0x1E);
        }