コード例 #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);
            }
        }