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(); }
public void ConnectTo(ULA ula, Screen screen) { this.ula = ula; this.screen = screen; }
public void ConnectTo(ULA ula) { this.ula = ula; }
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."; } }