コード例 #1
0
        public static string ConverterParaInstrucao(int line, List <int> portas, int nextLine)
        {
            string r = "";

            for (int i = 0; i < 32; i++)
            {
                r += portas.Contains(i) ? "1" : "0";
            }
            var next = CalculadoraBinario.IntParaBinario(nextLine.ToString(), 9);

            foreach (var item in next)
            {
                r += item;
            }
            var address = CalculadoraBinario.IntParaBinario(line.ToString(), 9);

            foreach (var item in address)
            {
                r += item;
            }
            for (int i = 50; i < 53; i++)
            {
                r += portas.Contains(i) ? "1" : "0";
            }
            return(r);
        }
コード例 #2
0
        public string Executa(string op, string a, string b)
        {
            if (op == Palavras.Opcode.Add)
            {
                return(CalculadoraBinario.Add(a, b));
            }

            return(null);
        }
コード例 #3
0
        public void Ciclo(string instrucao)
        {
            var instrucaoUla = instrucao[48].ToString() + instrucao[49].ToString() + instrucao[50].ToString();

            // inc
            if (instrucaoUla == "001")
            {
                AC.setConteudo(CalculadoraBinario.Add(_conteudo, "1"));
            }
        }
コード例 #4
0
 public static string getInstrucao(int endereco)
 {
     foreach (var item in codigo)
     {
         if (CalculadoraBinario.BinarioParaInt(item.Substring(41, 9)) == endereco)
         {
             return(item);
         }
     }
     return(null);
 }
コード例 #5
0
        public int LinhaCodigoAtual()
        {
            var pc = CalculadoraBinario.BinarioParaInt(Registradores.PC.getConteudo()) - 1;
            int r  = -1;

            try
            {
                r = _linhaBinarioXCodigo[pc];
            }
            catch (Exception)
            {}
            return(r);
        }
コード例 #6
0
        private string getMemoria(string endereco)
        {
            var enderecoInt = CalculadoraBinario.BinarioParaInt(endereco);


            var dado = Conteudo.Where(c => c.Endereco == enderecoInt).FirstOrDefault();

            if (dado == null)
            {
                return("".PadLeft(Palavras.LeitorPalavra.TamanhoPalavra, '0'));
            }
            return(dado.Conteudo);
        }
コード例 #7
0
        private void AddOuEditaMemoria(string endereco, string conteudo)
        {
            var enderecoInt = CalculadoraBinario.BinarioParaInt(endereco);

            var dado = Conteudo.Where(c => c.Endereco == enderecoInt).FirstOrDefault();

            if (dado == null)
            {
                Conteudo.Add(new Dado
                {
                    Conteudo = conteudo,
                    Endereco = enderecoInt
                });
            }
            else
            {
                dado.Conteudo = conteudo;
            }
        }
コード例 #8
0
        public void Rodar()
        {
            _logger.AddLog("----------------");
            var codigoFirmware = Firmware.getInstrucao(_enderecoFirmware);

            _icc = CalculadoraBinario.BinarioParaInt(codigoFirmware[30].ToString() + codigoFirmware[31].ToString());
            var comando = Palavras.LeitorPalavra.Ler(IR.getConteudo());

            // indirecao
            if (_icc == 1)
            {
                _enderecoFirmware = Decodificador.DecodificaInstrucaoIndirecao(comando);
                codigoFirmware    = Firmware.getInstrucao(_enderecoFirmware);
            }
            // execucao
            if (_icc == 2)
            {
                _enderecoFirmware = Decodificador.DecodificaInstrucaoExecucao(comando);
                codigoFirmware    = Firmware.getInstrucao(_enderecoFirmware);
            }


            if (codigoFirmware[26] == '1')
            {
                codigoFirmware = codigoFirmware.ChangeCaracter(Decodificador.DecodificaPorta(comando.P1Valor), '1');
            }

            if (codigoFirmware[27] == '1')
            {
                codigoFirmware = codigoFirmware.ChangeCaracter(Decodificador.DecodificaPorta(comando.P2Valor), '1');
            }

            BarramentoA.Ciclo(codigoFirmware);
            Memoria.Ciclo(codigoFirmware);
            Ula.Ciclo(codigoFirmware);


            _enderecoFirmware = CalculadoraBinario.BinarioParaInt(codigoFirmware.Substring(32, 9));
        }
コード例 #9
0
 public void AddUnidade()
 {
     _conteudo = CalculadoraBinario.Add(getConteudo(), "1");
 }