Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Binary_Death

#261
Foro Libre / Re: 10 frases de Steve Jobs
6 Enero 2013, 10:12 AM
Aunque parezca estúpido, he de decir que me deprimí el día de la muerte de Dennis Ritchie.
Steve Jobs está claro que fue un gran visionario y hombre de negocios que se supo montar bien las cosas, pero no comparemos, por favor, a Steve con Dennis. Es una blasfemia.
#262
Scripting / Re: Simulador de SO [Batch]
5 Enero 2013, 23:22 PM
Windows de 32 bits emula un entorno 8086 donde es como si trabajaras en modo real con el procesador, y como si el sistema fuese monotarea. En verdad esto no es así, únicamente lo emula.
ANSI.SYS lo que hace es escribir directamente bytes en el segmento de pantalla que comienza en la dirección 0B800h.
Si estuviéramos en MS-DOS escribiríamos directamente en la pantalla, no hay restricciones. En Windows toma como el segmento de pantalla lo que es la consola de comandos, la cmd, y escribe ahí.

Cuando trabajas con debug, Segadorfelix, en realidad estás haciendo eso mismo, pero manualmente. Es por lo mismo que tampoco funciona debug en Windows de 64 bits, no emula un entorno en modo real y por tanto no deja acceder, como bien dijo imoen, a ciertas direcciones de memoria que están únicamente reservadas para el propio kernel.

Aquí dejo otro tutorial de hace tiempo para quien prefiera entender un poco más como funciona esto usando debug, aunque repito que es mucho más rápido, fácil y eficiente trabajar con ANSI.SYS  ;)

Citar
Gráficos con Debug en Batch

¿Qué es Debug?
Debug es un debugger,  un depurador de código ensamblador para 16 bits. Windows lo incorpora por defecto y puede ser usado desde el CMD.
En este manual se explica de forma sencilla como acceder al segmento de pantalla y poder manipular de una forma potente, sencilla y eficaz los gráficos. Útil para juegos o para darle una apariencia más profesional a los scripts.

El segmento de pantalla.

El segmento de pantalla es un pedazo de la memoria donde todas las computadoras que ejecutan DOS, almacenan sus caracteres junto con sus atributos correspondientes a la consola de comandos.
El citado segmento comienza en la dirección 0B800h.
Al escribir datos directamente en un desplazamiento sobre ese segmento, esos datos aparecerán en pantalla.

Posición.

En ese segmento una posición ocupa dos bytes. El primero contiene el carácter y el segundo los atributos de éste.
Trabajando en una consola de x80y25, como es por defecto, veríamos que toda la pantalla ocupa 4000 bytes.
Bien, sabiendo que cada fila ocupa 160 bytes y cada columna ocupa 2 bytes, no es muy difícil hallar la fórmula para calcular la posición donde insertar un carácter.
La fórmula es esta: fila*160+columna*2. Lo que, adaptándolo al plano cartesiano, quedaría así: x*2+y*160. Puesto que las columnas son el eje horizontal X y las filas el eje vertical Y.
Así pues, la coordenada x1y3, por ejemplo, aplicando la fórmula, quedaría así:

1*2+3*160 = 482D = 1E2H

Se ha transformado a hexadecimal ya que es el sistema de numeración empleado en el uso de memoria.

Aplicación a Batch.

Lo que nos interesa es poder usar este sistema para realizar gráficos en batch. Vamos a ver como.


(
Echo.EB800:1E2 "Û"A
Echo.q
)|Debug>nul


En ese código hemos escrito desde Debug en la posición EB800:1E2. Hemos escrito dos bytes, que son los mencionados al comienzo de este manual: el carácter a escribir (1º byte) y su atributo (2º byte).
El carácter se encierra entre comillas, y posteriormente le sigue su atributo, que es un color en hexadecimal.
El atributo puede contener dos números hexadecimales, que corresponden al color de fondo de la coordenada en cuestión y al color del carácter, respectivamente.
Por lo tanto, al escribir en el segmento de pantalla algo así:


EB800:1E2 "A"AF


Lo que hicimos fue escribir en x1y3 la letra "A"; darle un fondo verde brillante a la casilla y un color blanco brillante a la letra.

Esto es todo, tan sólo hay que usar el ingenio para conseguir realizar gráficos más complejos y automatizar el cálculo de coordenadas hexadecimales.

Un saludo =)
#263
Cita de: RuB'n. en  5 Enero 2013, 19:45 PM
tas loco,,, no soy gay ni aunque me quiten el almaa,,,

En España camello=narcotraficante
#264
Cita de: RuB'n. en  5 Enero 2013, 18:56 PM
jaja rasta, no me creeras si te digo que igual, pero de otra manera.

Nah, sólo te diría que cambiaras de camello  :xD
#265
Sí, yo también, en ocasiones veo moertus.
#266
Scripting / Re: Simulador de SO [Batch]
5 Enero 2013, 18:23 PM
Bueno, la función no es mía. La idea es vieja y muchísimos batch coders hicieron sus versiones, pero lo difícil era quitar esos : que aparecían al final. En mi versión lo conseguí con el carácter backspace y usando un poco de imaginación  :P

En fin, aunque yo para colorear scripts largos recomendaría más el uso de ANSI.SYS, que a diferencia del colored echo permite displayear (¿?) caracteres especiales. No es tan limitado como cecho. Eso sí, tiene de malo que no anda en Windows de 64 bits.

Para el que le interese el uso de ansi.sys, una vez hice una recopilación de toda la info que me encontré por la red:

Citar
               Uso de ANSI.SYS
            Recopilación de información.




   Cargar el controlador de dispositivo ANSI.SYS.

Añadir a CONFIG.NT la siguiente línea:

DEVICE=[Unidad:][Ruta]ANSI.SYS [/X] [/K] [/R]

Parámetros:

/X
Reasigna de forma independiente las teclas extendidas en teclados de
101 teclas.

/K
Hace que ANSI.SYS considere un teclado de 101 teclas como si fuera un
teclado de 84 teclas.

/R
Ajusta el desplazamiento de líneas para mejorar la legibilidad cuando se
utiliza ANSI.SYS con programas de lectura de pantalla.



   Manejo del Cursor:

<ESC>[xA
Desplaza el cursor hacia arriba X filas.
Si el cursor se haya en la primera fila, no surge efecto.
Si no se especifica el número de filas se asume 1.

<ESC>[xB
Desplaza el cursor hacia abajo X filas.
Si el cursor se haya en la última fila, no surge efecto.
Si no se especifica el número de filas se asume 1.

<ESC>[xC
Desplaza el cursor hacia la derecha X columnas.
Si el cursor se haya en la primera columna, no surge efecto.
Si no se especifica el número de columnas se asume 1.

<ESC>[xD
Desplaza el cursor hacia la izquierda X columnas.
Si el cursor se haya en la última columna, no surge efecto.
SI no se especifica el número de columnas se asume 1.

<ESC>[Y;X(f/H)
Desplaza el cursor a la fila Y, columna X.
Si no se especifica Y se asume 1.
Si no se especifica X se asume 1.

<ESC>[s
Guarda la posición actual del cursor.

<ESC>[u
Restaura la posición del cursor previamente guardada.


   Borrado de pantalla:

<ESC>[xJ
Borra la pantalla.
Si X vale 0, se borra desde la posición del cursor hasta el final de la pantalla.
Si X vale 1, se borra desde la posición del cursor hasta el principio de la pantalla.
Si X vale 2, se borra toda la pantalla.

<ESC>[xK
Borra la línea actual.
Si X vale 0, se borra desde la posición del cursor hasta el final de la línea.
Si X vale 1, se borra desde la posición del cursor hasta el principio de la línea.
Si X vale 2, se borra toda la línea.

   
   Atributos de texto:

<ESC>[<Atr>;...mTEXTO
Establece los atributos de texto.
Puede escribirse un texto en pantalla después del finalizador "m".
Los atributos son procesados secuencialmente.


Valores de <Atr> para propiedades de texto:

X=0   Desactiva todos los atributos.
X=1   Activa negrita.
X=4   Activa subrayado (monócromo).
x=5   Activa parpadeo.
X=7   Activa vídeo inverso.
X=8   Activa texto oculto.

Valores de <Atr> para color de texto:

Negro      Primer Plano X=30, Segundo Plano X=40.
Rojo      Primer Plano X=31, Segundo Plano X=41.
Verde      Primer Plano X=32, Segundo Plano X=42.
Amarillo   Primer Plano X=33, Segundo Plano X=43.
Azul      Primer Plano X=34, Segundo Plano X=44.
Magenta      Primer Plano X=35, Segundo Plano X=45.
Azul Verdoso   Primer Plano X=36, Segundo Plano X=46.
Blanco      Primer Plano X=37, Segundo Plano X=47.


Si no se especifica <Atr>, se asume 0.
Nota: Los atributos pueden combinarse, separados por punto y coma.


   Selección de modo gráfico:

<ESC>[=Xh
Establece el tamaño del búfer de vídeo o el modo de presentación.

Valores de X para el cambio:

X=0   40x25 B/N.
X=1   40x25 COLOR.
X=2   80x25 B/N.
X=3   80x25 COLOR.
X=4   320x200 COLOR (CGA).
X=5   320x200 B/N (CGA).
X=6   640x200 B/N (CGA).
X=7   TURN ON LINE WRAP (Habilitar ajuste de línea).
X=14   640x200 COLOR (EGA).
X=15   640x350 MONO (EGA 4 colores).
X=16   640x350 COLOR (EGA 16 colores).
X=17   640x480 COLOR (VGA 16 colores).
X=18   640x480 COLOR (VGA 256 colores).
X=19   320x200 COLOR (MCGA 256 colores).

Nota: Para deshabilitarlos usar el mismo valor que para habilitarlos
A excepción de LINE WRAP, en cuyo caso su deshabilitación procede de la siguiente manera:

<ESC>[=7l
TURN OFF LINE WRAP (Deshabilitar ajuste de línea, truncar).

Nota: Si el ajuste de línea está desactivado una línea mayor de 80 carácteres es truncada.

   Asignación de teclas:

<ESC>[<Key>;<Result...>p
Redefine el resultado de presionar una tecla.

Donde <Key>, será el número ASCII de la tecla a redefinir o bien el carácter mismo encerrado entre comillas dobles.
<Result>, será el número ASCII de la tecla como resultado de la redefinición o bien el carácter mismo encerrado entre comillas dobles.

Nota: pueden especificarse más de un carácter ASCII separados por punto y coma como resultado de una asignación, mas no como tecla a redefinir.

Ejemplo:

<ESC>[65;66;67p

Redefine el carácter ASCII 65, equivalente a la letra "A", como la sucesión de carácteres "66;67", equivalentes a "BC".
Esto es, redefine la tecla "A" para que cuando ésta sea presionada, en pantalla se escriba "BC".

En elhacker.net no la había posteado. Por ahí os sirve.

Y también hice esto:


@echo off
:_ansi.sys
mode con cols=80 lines=25
mem/c | find /i "ansi" 1>nul || ((
echo.device=%SystemRoot%\system32\ansi.sys /X
)>>%SystemRoot%\system32\config.nt
if "%~1" NEQ "1" (
start "" %0 1 & exit /b 0
) else (exit /b 1)
) 1>nul 2>&1
:_code


Función para añadir al comienzo de todos los scripts batch que usen ansi.sys.
La función intenta cargarlo en memoria añadiendo una línea al fichero config.nt. Si por la razón que fuera no pudiera hacerlo (no tiene permisos, por ejemplo), cierra el script. Si puede cargar correctamente el controlador de dispositivo reinicia el script y continúa su normal ejecución.

Bueno  ;D casi que el tema daba para un topic aparte pero espero que para Batch Games o Sistemas Operativos en Batch ( :silbar:) sirva ;)
#267
Scripting / Re: Simulador de SO [Batch]
4 Enero 2013, 07:26 AM
Pues hombre... lo saqué de aquí: http://foro.elhacker.net/scripting/error_con_el_comando_goto_msdos-t358617.0.html;msg1735378#msg1735378

El post es de abril de 2012, lo que significa que por ese entonces tú nivel de batch era muy, muy básico.

Mi intención no era ofenderte ni decirte lo que debías o no debías hacer, mi intención fue ayudarte a que no empezaras un proyecto grande sin considerar bien las cosas antes.

Ahora, allá tú. Yo ya me callo  :rolleyes:
#268
Foro Libre / Re: Energia eterna
3 Enero 2013, 22:45 PM
Y esa máquina... ¿hay que hacerla con imanes, no?  :laugh:

Es una trollscience.
#269
Los ***** amos  ;D Si fuera Islandés me sentiría orgulloso.
#270
Scripting / Re: Simulador de SO [Batch]
31 Diciembre 2012, 04:39 AM
A ver... no es por desilusionar a nadie, que realmente lo odio, pero...

Por lo que veo eres bastante nuevo. Hasta hace unos meses tu nivel de batch era muy bajo y aunque batch es fácil de aprender, no lo es tanto aprender las diferentes formas de saltear sus limitaciones. Eso lleva un buen tiempo.
No sé cuánto habrás podido aprender, pero más vale que sea mucho si te quieres meter en un proyecto serio.

Además, si tienes el enorme conocimiento de hardware y programación necesario para programar un SO en C/C++, permíteme la pregunta, ¿qué diablos haces tonteanto de esta forma con batch?

Ahora pasemos a los problemas intrínsecos que plantea en sí tu proyecto.
Hablar de un SO en batch es una total tontería. Hay un programita en windows, no muy grande y bastante mal programado (como casi todo lo de mocosoft) llamado cmd.exe. Este programita, a cuya ejecución están asignados todos los ficheros con extensión .bat y .cmd, interpreta las líneas de tu script y trabaja con el SO (Windows) para llevarlas a cabo.
Si desde batch creas un fichero, será la cmd la encargada de llamar a la API.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

Imagino que con esto ya te das cuenta de los errores de terminología.

Ahora, si quieres hacer una especie de máquina virtual, por ejemplo, para ejecutar scripts batch sin peligro para el resto del sistema, eso sí que lo veo más factible, aunque de todas formas igualmente no es fácil. Habría que procurar aislar en apariencia totalmente ese script batch del sistema, y no digo que sea imposible, pero sí que bastante laborioso.
¿Formas? Desde tu "Batch Virtualbox" podrías ver los comandos que tiene el script a ejecutar y los cambios que podría hacer en Windows. Ver la condición del sistema en ese momento y más tarde, después de la ejecución del script, restaurarlos.
Esa tal vez sería la forma más sencilla.

En fin, como digo, no es mi intención desalentarte, pero por favor sé consciente de las cosas antes de querer hacer nada.