Esempio n. 1
0
 /// <summary>Procesa las peticiones de la consola de depuracion</summary>
 /// <param name="cpu">CPU principal de la consola para acceder a sus registros y memoria</param>
 public static void ConsolaDepuracion(kernel.CPU cpu)
 {
     string linea = null;
     string[] a = null;
     WriteLine("Iniciando Consola de depuracion");
     mostrarAyudaConsolaDepuracion();
     do{
         Write("CSGBE> ");
         linea = Console.ReadLine();
         a = linea.Split(null);
         try{
             switch(a[0]){
                 case "?": mostrarAyudaConsolaDepuracion(); break;
                 case "r": imprimirRegistros(cpu.registros); break;
                 case "i": imprimirInterrupciones(cpu.registros, cpu.memoria); break;
                 case "m": hexDump(cpu.memoria, wordHex(a[1]), Int32.Parse(a[2])); break;
                 case "x": cpu.reset(); break;
                 case "e": cpu.procesarInstrucciones(Int32.Parse(a[1])); break;
                 case "a": cpu.registros.setReg(a[1].ToUpper(), wordHex(a[2])); break;
                 case "f": cpu.registros.setFlag(a[1], !cpu.registros.getFlag(a[1])); break;
                 case "w": cpu.memoria.escribir(wordHex(a[2]), wordHex(a[1])); break;
                 case "n": asignarInterrupcion(cpu.memoria, a[1], a[2]); break;
                 case "k": toggleTecla(cpu.memoria, a[1]); break;
                 case "b": cpu.toggleBreakpoint(wordHex(a[1])); break;
             }
         }catch(Exception e){ WriteLine(e.StackTrace); }
     }while(a[0] != "q");
     WriteLine("Fin de la consola de depuracion");
 }
Esempio n. 2
0
 => input => new CuDnnConvolutionalLayer(input, info, kernel, kernels, activation, biasMode);
Esempio n. 3
0
 /// <summary>Cambia el estado de una tecla de la consola</summary>
 /// <param name="memoria">Memoria</param>
 /// <param name="tecla">Nombre de la tecla (DOWN, UP, LEFT, RIGHT, START, SELECT, B o A)</param>
 private static void toggleTecla(kernel.Memoria memoria, string tecla)
 {
     tecla = tecla.ToUpper();
     int idTecla = 0;
     bool error = false;
     switch(tecla){
         case "DOWN": idTecla = kernel.Constantes.KEY_DOWN; break;
         case "UP": idTecla = kernel.Constantes.KEY_UP; break;
         case "LEFT": idTecla = kernel.Constantes.KEY_LEFT; break;
         case "RIGHT": idTecla = kernel.Constantes.KEY_RIGHT; break;
         case "START": idTecla = kernel.Constantes.KEY_START; break;
         case "SELECT": idTecla = kernel.Constantes.KEY_SELECT; break;
         case "B": idTecla = kernel.Constantes.KEY_B; break;
         case "A": idTecla = kernel.Constantes.KEY_A; break;
         default: error = true; break;
     }
     if (!error) Keypad.toggleTecla(idTecla);
 }
Esempio n. 4
0
 /// <summary>Imprime el valor de todos los registros</summary>
 /// <param name="registros">Registros</param>
 private static void imprimirRegistros(kernel.Registros registros)
 {
     WriteLine("PC = " + hexWord(registros.regPC) + "\tSP = " + hexWord(registros.regSP));
     WriteLine("A = " + hexByte(registros.regA) + "\tB = " + hexByte(registros.regB) + "\tC = " + hexByte(registros.regC) + "\tD = " + hexByte(registros.regD) + "\tE = " + hexByte(registros.regE) + "\tH = " + hexByte(registros.regH) + "\tL = " + hexByte(registros.regL));
     WriteLine("Z = " + registros.flagZ + "\tN = " + registros.flagN + "\tH = " + registros.flagH + "\tC = " + registros.flagC);
 }
Esempio n. 5
0
 /// <summary>Imprime el estado de las interrupciones y del IME (Interrupt Master Enable)</summary>
 /// <param name="registros">Registros</param>
 /// <param name="memoria">Memoria</param>
 private static void imprimirInterrupciones(kernel.Registros registros, kernel.Memoria memoria)
 {
     WriteLine("IME = " + registros.flagIME);
     Write("VBLANK = " + ((memoria.leer(kernel.Constantes.INT_FLAG) & kernel.Constantes.INT_VBLANK) > 0));
     Write("\tLCDC = " + ((memoria.leer(kernel.Constantes.INT_FLAG) & kernel.Constantes.INT_LCDC) > 0));
     Write("\tTIMER = " + ((memoria.leer(kernel.Constantes.INT_FLAG) & kernel.Constantes.INT_TIMER) > 0));
     Write("\tSERIALTX = " + ((memoria.leer(kernel.Constantes.INT_FLAG) & kernel.Constantes.INT_SERIALTX) > 0));
     WriteLine("\tKEY = " + ((memoria.leer(kernel.Constantes.INT_FLAG) & kernel.Constantes.INT_KEY) > 0));
 }
Esempio n. 6
0
 /// <summary>Imprime una zona de memoria en un formato presentable</summary>
 /// <param name="memoria">Memoria</param>
 /// <param name="direccion">Direccion de memoria de inicio</param>
 /// <param name="longitud">Cantidad de bytes que se quieren imprimir a partir de la direccion de inicio (minimo 10)</param>
 private static void hexDump(kernel.Memoria memoria, int direccion, int longitud)
 {
     int start = direccion & 0xFFF0;
     int lines = longitud / 16;
     if (lines == 0) lines = 1;
     for (int l = 0; l < lines; l++) {
         Write(hexWord(start + (l * 16)) + "   ");
         for (int r = start + (l * 16); r < start + (l * 16) + 16; r++) Write(hexByte(memoria.leer(r)) + " ");
         Write("   ");
         for (int r = start + (l * 16); r < start + (l * 16) + 16; r++) {
             char c = (char)memoria.leer(r);
             if ((c >= 32) && (c <= 128)) Write(c);
             else Write(".");
         }
         WriteLine();
     }
 }
Esempio n. 7
0
 /// <summary>Activa o desactiva una interrupcion</summary>
 /// <param name="memoria">Memoria</param>
 /// <param name="interrupcion">Nombre de la interrupcion a modificar (VBLANK, LCDC, TIMER, SERIALTX o KEY)</param>
 /// <param name="valor">Nuevo valor para la interrupcion. 1 o 0</param>
 private static void asignarInterrupcion(kernel.Memoria memoria, string interrupcion, string valor)
 {
     bool error = false;
     int val = 0;
     interrupcion = interrupcion.ToUpper();
     switch(interrupcion){
         case "VBLANK": val = kernel.Constantes.INT_VBLANK; break;
         case "LCDC": val = kernel.Constantes.INT_LCDC; break;
         case "TIMER": val = kernel.Constantes.INT_TIMER; break;
         case "SERIALTX": val = kernel.Constantes.INT_SERIALTX; break;
         case "KEY": val = kernel.Constantes.INT_KEY; break;
         default: error = true; break;
     }
     switch(valor){
         case "1": break;
         case "0": val = ~val; break;
         default: error = true; break;
     }
     if (!error) memoria.escribir(memoria.leer(kernel.Constantes.INT_FLAG) | val, kernel.Constantes.INT_FLAG);
 }