/// <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); }