public ULAStateLogger(ULA ula)
 {
     this.ula = ula;
     log      = new StringBuilder();
 }
        private void LogULAState(ULA ula, ULA.InternalState internalState, ULA.LifecycleEventType eventType)
        {
            // First column : event type
            switch (eventType)
            {
            case ULA.LifecycleEventType.ClockCycle:
                log.Append("CL");
                log.Append((internalState.Column % 16).ToString("D2"));
                break;
            }
            log.Append(';');
            // Pixel clock and master counters
            if (stateElementsToLog.HasFlag(ULAStateElements.MasterCounters))
            {
                log.Append(ula.PixelCLK == SignalState.LOW ? 0 : 1);
                log.Append(';');
                log.Append(internalState.Line);
                log.Append(';');
                log.Append(internalState.Column);
                log.Append(';');
            }
            // CPU clock and interrupt
            if (stateElementsToLog.HasFlag(ULAStateElements.CPUClock))
            {
                log.Append(ula.CpuCLK == SignalState.LOW ? 0 : 1);
                log.Append(';');
                log.Append(internalState.HaltCpuClock);
                log.Append(';');
                log.Append(ula.CpuINT == SignalState.LOW ? 0 : 1);
                log.Append(';');
            }
            // ULA data input / output
            if (stateElementsToLog.HasFlag(ULAStateElements.DataIO))
            {
                log.Append(ula.VideoAddress.SampleValue().ToString("X4"));
                log.Append(';');
                log.Append(ula.VideoData.SampleValue().ToString("X2"));
                log.Append(';');

                log.Append(internalState.VideoMemAccessTimeFrame);
                log.Append(';');
                log.Append(ula.CpuIORQ == SignalState.LOW ? 0 : 1);
                log.Append(';');
                log.Append(ula.CpuWR == SignalState.LOW ? 0 : 1);
                log.Append(';');
                log.Append(ula.CpuRD == SignalState.LOW ? 0 : 1);
                log.Append(';');

                log.Append(ula.VideoMREQ == SignalState.LOW ? 0 : 1);
                log.Append(';');
                log.Append(ula.VideoRD == SignalState.LOW ? 0 : 1);
                log.Append(';');
            }
            // Video output
            if (stateElementsToLog.HasFlag(ULAStateElements.VideoOutput))
            {
                log.Append(ula.ColorSignal.Level);
                log.Append(';');
                log.Append(ula.HSync == SignalState.LOW ? 0 : 1);
                log.Append(';');
                log.Append(ula.VSync == SignalState.LOW ? 0 : 1);
                log.Append(';');
            }
            // Internal video generator
            if (stateElementsToLog.HasFlag(ULAStateElements.VideoRegisters))
            {
                log.Append(internalState.GenerateBorder);
                log.Append(';');
                log.Append(internalState.BorderColorRegister);
                log.Append(';');

                log.Append(internalState.DisplayAddress.ToString("X4"));
                log.Append(';');
                log.Append(internalState.DisplayLatch);
                log.Append(';');
                log.Append(internalState.DisplayRegister);
                log.Append(';');
                log.Append(internalState.DisplayPixels);
                log.Append(';');

                log.Append(internalState.AttributeAddress.ToString("X4"));
                log.Append(';');
                log.Append(internalState.AttributeLatch);
                log.Append(';');
                log.Append(internalState.AttributeRegister);
                log.Append(';');

                log.Append(internalState.Frame);
                log.Append(';');
                log.Append(internalState.FlashClock);
                log.Append(';');
            }
            log.AppendLine();
        }
Exemple #3
0
 public void ConnectTo(ULA ula, Screen screen)
 {
     this.ula    = ula;
     this.screen = screen;
 }
Exemple #4
0
 public void ConnectTo(ULA ula)
 {
     this.ula = ula;
 }
Exemple #5
0
        private void proxinst_Click(object sender, EventArgs e)
        {
            String reg1 = null;

            try
            {
                //Flags
                if (memoria.Text.Split('-')[enderecoAtual].Substring(0, 2).Equals("00"))
                {
                    msgDebug.Text      = "Não há instrução para ser executada.";
                    msgDebug.ForeColor = System.Drawing.Color.White;
                    return;
                }

                //Cor instrucao
                memoria.Select(enderecoAnterior * 9, 8);
                memoria.SelectionColor = System.Drawing.Color.Orange;
                memoria.Select(enderecoAtual * 9, 8);
                memoria.SelectionColor = Color.OrangeRed;


                Instrucoes.pegarInst(ref op, ref infosInstrucao, ref mem, memoria.Text, enderecoAtual);

                for (int i = 0; i < labelReg.Count; i++)
                {
                    if (i == infosInstrucao[enderecoAtual])
                    {
                        labelReg[i].ForeColor = System.Drawing.Color.Chartreuse;
                    }
                    else
                    {
                        labelReg[i].ForeColor = System.Drawing.Color.Cornsilk;
                    }
                }

                if (op[enderecoAtual] == 16)
                {
                    ULA.SalvarCarregarDados(op[enderecoAtual], ref infoRegImediato, infosInstrucao[enderecoAtual].ToString());
                    msgDebug.ForeColor     = System.Drawing.Color.Chartreuse; // verde
                    msgDebug.Text          = "Endereço atual: " + enderecoAtual.ToString() + ", Operação: " + op[enderecoAtual].ToString();
                    enderecoAnterior       = enderecoAtual++;
                    infoRegInstrucoes.Text = enderecoAtual.ToString();
                    return;
                }

                reg1 = listaReg[infosInstrucao[enderecoAtual]].Text;
                if (op[enderecoAtual] == 13 || op[enderecoAtual] == 14 || op[enderecoAtual] == 17)
                {
                    while (progressBar1.Value < 100)
                    {
                        System.Threading.Thread.Sleep(350);
                        progressBar1.Value += 10;
                    }

                    ULA.executarTransferencia(op[enderecoAtual], ref memoria, infosInstrucao[enderecoAtual], ref listaReg, ref infoRegImediato, infoRegACHex.Text);
                    enderecoAnterior       = enderecoAtual++;
                    infoRegInstrucoes.Text = enderecoAtual.ToString();
                    if (op[enderecoAtual] == 13)
                    {
                        msgDebug.Text = "Dado inserido no registrador.";
                    }
                    else
                    {
                        msgDebug.Text = "Dado inserido na memoria.";
                    }
                    return;
                }


                if (op[enderecoAtual] == 15)
                {
                    enderecoAnterior       = enderecoAtual++;
                    infoRegInstrucoes.Text = enderecoAtual.ToString();
                    return;
                }
                else if (op[enderecoAtual] > 7 && op[enderecoAtual] < 14)
                {
                    enderecoAnterior   = enderecoAtual;
                    msgDebug.ForeColor = System.Drawing.Color.Chartreuse; // verde
                    msgDebug.Text      = "Endereço atual: " + enderecoAtual.ToString() + ", Operação: " + op[enderecoAtual].ToString();
                    ULA.executarPulos(op[enderecoAtual].ToString("X"), Convert.ToInt32(reg1), Convert.ToInt32(infoRegACHex.Text, 16), ref enderecoAtual, ref listaJumps, ref nomeJump, listaFlags);
                }
                else
                {
                    listaReg[infosInstrucao[enderecoAtual]].Text = listaReg[infosInstrucao[enderecoAtual]].Text.PadLeft(8, '0').ToUpper();
                    int resultado = Convert.ToInt32(ULA.executarOperacao(op[enderecoAtual].ToString("X"), reg1, Convert.ToInt32(infoRegACHex.Text, 16), listaFlags), 10);
                    infoRegACBin.Text  = Convert.ToString(resultado, 2).PadLeft(8, '0');
                    infoRegACHex.Text  = Convert.ToString(resultado, 16).ToUpper();
                    infoRegACDec.Text  = resultado.ToString();
                    msgDebug.ForeColor = System.Drawing.Color.Chartreuse; // verde
                    msgDebug.Text      = "Endereço atual: " + enderecoAtual.ToString() + ", Operação: " + op[enderecoAtual].ToString();
                    enderecoAnterior   = enderecoAtual++;
                }
                infoRegInstrucoes.Text = enderecoAtual.ToString();
            }
            catch (Exception)
            {
                msgDebug.ForeColor = System.Drawing.Color.Red;
                msgDebug.Text      = "[ERRO] Valores invalidos.";
            }
        }
 public void ConnectTo(ULA ula)
 {
     this.ula = ula;
 }
 public void ConnectTo(ULA ula, Screen screen)
 {
     this.ula = ula;
     this.screen = screen;
 }