Пример #1
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();
     }
 }
Пример #2
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));
 }
Пример #3
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);
 }