Beispiel #1
0
        /// <summary>
        /// Checks if the disassembler should enter into Spectrum-specific mode after
        /// the specified disassembly item.
        /// </summary>
        /// <param name="item">Item used to check the Spectrum-specific mode</param>
        /// <returns>
        /// True, to move to the Spectrum-specific mode; otherwise, false
        /// </returns>
        private bool ShouldEnterSpectrumSpecificMode(DisassemblyItem item)
        {
            // --- Check if we find flags for the bank of the disassembly item
            var bank = item.Address >> 14;

            if (!DisassemblyFlags.TryGetValue(bank, out var flags) ||
                flags == SpectrumSpecificDisassemblyFlags.None)
            {
                return(false);
            }

            // --- Check for Spectrum 48K RST #08
            if ((flags & SpectrumSpecificDisassemblyFlags.Spectrum48Rst08) != 0 &&
                item.OpCodes.Trim() == "CF")
            {
                _spectMode       = SpectrumSpecificMode.Spectrum48Rst08;
                item.HardComment = "(Report error)";
                return(true);
            }

            // --- Check for Spectrum 48K RST #28
            if ((flags & SpectrumSpecificDisassemblyFlags.Spectrum48Rst28) != 0 &&
                (item.OpCodes.Trim() == "EF" ||            // --- RST #28
                 item.OpCodes.Trim() == "CD 5E 33" ||      // --- CALL 335E
                 item.OpCodes.Trim() == "CD 62 33"))       // --- CALL 3362
            {
                _spectMode       = SpectrumSpecificMode.Spectrum48Rst28;
                _seriesCount     = 0;
                item.HardComment = "(Invoke Calculator)";
                return(true);
            }

            // --- Check for Spectrum 128K RST #28
            if ((flags & SpectrumSpecificDisassemblyFlags.Spectrum128Rst28) != 0 &&
                item.OpCodes.Trim() == "EF")
            {
                _spectMode       = SpectrumSpecificMode.Spectrum128Rst8;
                item.HardComment = "(Call Spectrum 48 ROM)";
                return(true);
            }

            return(false);
        }