private void DisplayState(MegadriveState state)
        {
            Console.WriteLine($"A0=${state.ReadAReg(0x0):X8} A1=${state.ReadAReg(0x1):X8}");
            Console.WriteLine($"A2=${state.ReadAReg(0x2):X8} A3=${state.ReadAReg(0x3):X8}");
            Console.WriteLine($"A4=${state.ReadAReg(0x4):X8} A5=${state.ReadAReg(0x5):X8}");
            Console.WriteLine($"A6=${state.ReadAReg(0x6):X8} A7=${state.ReadAReg(0x7):X8}");
            Console.WriteLine($"D0=${state.ReadDReg(0x0):X8} D1=${state.ReadDReg(0x1):X8}");
            Console.WriteLine($"D2=${state.ReadDReg(0x2):X8} D3=${state.ReadDReg(0x3):X8}");
            Console.WriteLine($"D4=${state.ReadDReg(0x4):X8} D5=${state.ReadDReg(0x5):X8}");
            Console.WriteLine($"D6=${state.ReadDReg(0x6):X8} D7=${state.ReadDReg(0x7):X8}");
            Console.WriteLine($"PC=${state.PC:X8} SR=${state.SR:X8}");

            Console.WriteLine();
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="MegadriveDecoder"/> class.
        /// </summary>
        /// <param name="rom">rom data.</param>
        public MegadriveDecoder(Data rom)
        {
            RomHeader h = new RomHeader(rom);

            this.DisplayHeader(h);

            ushort checksum = rom.Checksum(0x200);
            string match    = checksum == h.Checksum ? "match" : "invalid";

            Console.WriteLine($"Calc Checksum:\t${checksum}\t{match}");
            Console.WriteLine();

            this.state = new MegadriveState(rom, h.Origin, h.SP, h.RomStart, h.RomEnd, h.RamStart, h.RamEnd);

            this.disassembly = new Dictionary <uint, OpCode>();
        }