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 - DameBanda

#1
La BIOS deja en el registro dl el disco principal del sistema, para escribir puedes usar este código:

https://wiki.osdev.org/ATA_read/write_sectors
#2
Prueba a descargarte la librería (el .h y el .c), pegar esos archivos en la carpeta del proyecto y hacer un include con esta línea:

#include"conio2.h"
#3
Pues programar es un proceso bastante amplio y para aprender de toda la vida hay dos vías, desde el tejado o desde la base y oye, ninguna es peor que la otra (me explico).

Tu puedes estudiar un poco como funciona un ordenador y entender que al final es una calculadora muy rápida que recuerda los resultados de las operaciones. Que sigue una lógica muy estricta y no es capaz de manejar ningún tipo de situación inesperada (todos los estados de la máquina hay que definirlos)

una vez entiendas eso, te va a resultar lógico que programar un ordenador incluya, algoritmos (recetas definidas para realizar procesos), control de flujo (decirle a la máquina boba que vaya por un camino determinado y no se pierda) y manejo de memoria (decirle cuanta memoria leer y escribir y en que parte de toda la memoria disponible trabajar).

En ese punto, te compras un libro específico de un lenguaje para aprenderte la sintaxis (si sigues esta vía C es el mejor) y con un poco de práctica y en unos meses estás haciendo tus programitas.

Los pros de este método son que una vez llegues al estadio en el que aprendas el lenguaje específico vas a tener un código sólido y te va a resultar mucho mas rápido aprender cualquier otro lenguaje porque tendrás muy buena base.

Los contras: Es mas tedioso y aburrido, y programar debería ser algo divertido!!

El otro sistema, es aprender fallando. Meterte a un lenguaje que te guste y hacer tus programas. Llegando al punto en el que, por práctica, vayas abstrayendo los conceptos fundamentales de tu experiencia del día a día.
Lo único que te recomiendo es que si vas a seguir esta vía elijas otro lenguaje que no sea C, ni C++, ni Java.

Mejor aprende Python o javascript.

Si tienes alguna duda mas específica puedes dejármela por aquí. Hace años que no entro al foro pero voy a intentar estar un poquitin mas activo. Un saludazo, mucho ánimo y recuerda, estás a las puertas de un mundo apasionante!
#4
Hola!

No se muy bien que es lo que pretendes, ni que nivel de conocimientos tienes, así que voy a intentar darte una mini explicación de lo que supone escribir el kernel de un sistema operativo.

Simplificando mucho un computador se compone de memoria y un procesador.

En la memoria se almacenan datos y programas (Modelo Von Neumann)
El procesador toma una instrucción de la memoria, la ejecuta y guarda los datos en alguna otra posición.

El procesador tiene una lista de códigos llamados códigos de operación (OPCODES), que le indican que operación realizar. Por ejemplo el código 0 es sumar, el 1 restar, el 2 saltar a tal posición de memoria y el 3 copiar un dato de una posicion a otra.

Esos opcodes tienen una traducción directa por medio de tablas a una palabra clave del lenguaje ensamblador. Te pongo otro ejemplo:

Imaginate un procesador de 8 bits que me acabo de inventar. Las instrucciones de ese procesador (datos que recibe el procesador) están estructuradas así:

los 4 primeros bits son el opcode
los dos siguientes, si procede, son la dirección de memoria de la cual tomar el primer dato y los dos ultimos donde dejarlo

un dump de la memoria principal de nuestro pc es este

DIRECCIÓN  DATO
0000            0011 01 10
0001            0000 11 11
0010            0000 00 00

Cuando la bios empieza a cargar la memoria principal el IP (instruction pointer, puntero que dice en que posicion de la memoria estamos) apunta a la primera dirección, la 0000 en este caso. Por tanto le pasa al ordenador la instrucción 00110110 que es: 0011 opcode 3, copiar datos de una direccion a otra, 01 copiar los datos de esa dirección 10 a esta dirección.

Así que despues de ejecutar el programa la ram quedaría así

DIRECCIÓN  DATO
0000            0011 01 10
0001            0000 11 11
0010            0000 11 11

Esta ha sido una mini clase de arquitectura de ordenadores que creo que te va a venir guay.

Ahora el ensamblador:

El ensamblador es una traducción directa de esos OPcodes a reglas mnemotécnicas escritas con letras. Osea que en vez de 00110110 vamos a decir que el opcode 0011 es CPY (por copy) 01 es 0x1 (porque solemos trabajar en hexadecimal) y 10 es 0x2 (por lo mismo), añadimos algo de sintaxis y nuestro programa se convierte en:

CPY 0x1, 0x2

Volvamos ahora a tu kernel.

Ya hemos dicho que cada procesador tiene una lista de opcodes. Y que tu puedes hacerte tus programitas muy básicos en ensamblador. Ahora bien,

Un programa tipo hola mundo en ensamblador son 20 lineas mas o menos (Bastante coñazo programar un sistema operativo de esa manera). Así que en vez de hacerlo todo a mano, un enfoque mas práctico es hacer un montón de programitas de uso común y llamarlos pasandoles parámetros por la pila (que es un conjunto de datos que no me voy a poner a explicar porque no acabo) cada vez que los necesites saltando a la dirección de memoria en la que están.

Ese conjunto de programas que son específicos del hardware para el que los escribas son una parte del kernel. Serían la librería de operaciones con la que luego programarías el sistema operativo.

Una vez tengas eso te quedan 3 cosas por entender. Interrupciones, manejo de memoria y lectura/escritura en discos pero casi mejor que eso lo busques en google que para eso vivimos en el 2018  ;D

Interrupciones son una lista de códigos específicos de la BIOS que permiten acceder a ciertos elementos de hardware diferentes al procesador (como la pantalla, los discos, el audio, etc)

La lectura y escritura de discos funciona dependiendo también del modelo específico del disco pero suele funcionar de la siguiente manera: Tu le dices en que dirección empieza la lista de 0s y 1s que quieras leer, como de larga es y a partir de que dirección de la memoria quieres empezar a copiar.

Es importante porque tu sistema operativo empieza en un disco ROM que no se borra al cortar la corriente y tienes que cargarlo accediendo al disco con este sistema que te cuento.

Por último te había dicho que para acceder a cada programa de la librería una vez cargada en memoria necesitas saltar a la dirección en la que empieza cada programa. Pues para saber donde está cada uno, y evitar que se solapen los datos del programa, o que algún dato sobreescriba alguna instrucción (overflow) necesitas un administrador de memoria.

Si consigues escribirte tu pequelibrería, tu administrador y tu sistema de lectura/escritura de discos, se podría decir que tienes un kernel básico. A partir de ahí puedes programar sobre la librería que te hayas hecho.

Es una tarea bastante tediosa pero muy agradecida. Al final tienes algo 100% tuyo y si eres capaz de hacerlo podrás decir que sabes como funciona un ordenador a la perfección. O al nivel de un ingeniero por lo menos.

Como último detalle te dejo un bootloader para x86 que escribí hace un tiempo. Es el primer componente del kernel y es lo que te permite (con alguna modificación) cargar código desde los discos ROM y ponerlo todo a andar. Lo tienes aquí: https://github.com/TretornESP/bootable-x86-asm/blob/master/bootable.asm

Si tienes alguna otra duda mándame un issue en github mejor que por el foro no ando mucho.

Espero que el tostón técnico te haya servido. Sin mas, un saludo!!
#5
Hola navigtoor, espero no llegar muy tarde.

Debes tener un interprete de python para correr el sec.py. Pero si te da pereza que sepas que solo cifra el usuario y la contraseña que metes al instalar. Así que si te da pereza puedes borrar la parte del archivo mencionado en buildmap.txt.

Si de verdad necesitas ayuda te puedo reescribir los archivos para que te funcione, pero ya ni me acuerdo muy bien de que hice y soy un programador spaghetti de narices, aún así gracias por ser el primer no familiar que intenta usar algo hecho por mi.

Saludos!!
#6
Yo vengo a responderte a lo de la build. Mas que nada porque es en lo único que creo puedo ayudarte.

1. Por norma general la RAM en cuantos mas slots esté mas "rápido" es asimilada. así que yo pondría 2 de 4gb en vez de una de 8

2. Yo soy partidario en pcs de gama media de usar binómios amd-amd intel-nvidia
así que yo pondría un apu (un 7700k) y una 270x (la que yo tengo ahora mismo en el pc) o ese procesador con una 760 (aunque se salga un pelín del precio exacto que marcaste)

3. Ni se te ocurra usar socket 1155 solo admite RAM hasta 1333

4. En mi opinión un ssd no es necesario pero siempre puedes pillar alguno de 128 > que no viene mal nunca eso de arrancar rápido

5. El montaje y todo eso, hazlo con cuidado si lo haces tu (no es la primera gráfica que me cargo por la estática)

Bueno, esto es todo lo que se me ocurre de manera mas "objetiva" luego a mayores te podría recomendar un wd en vez de un seagate o una torre en particular, pero ya es preferencia personal.

Tambien deberías hecharle un vistazo a los pc's que monta pccomponentes, son bastante buenos en calidad precio pero siempre te recortan de algún lado. Aún así suelen ser cojonudos.

http://www.pccomponentes.com/pccom_gaming_revolution_a10_7700k__8gb_2tb_r9_270x.html?utm_source=pccomponentes-landingpccom&utm_medium=pccom-gaming&utm_campaign=promopccom&utm_content=70221

Que tengas un buen día :D
#7
Hola a todos.

Hacía ya mucho tiempo que no entraba al foro, y mucho mas que no aportaba nada.
Hasta ayer, cuando a raíz de una pregunta que hice, me entro el gusanillo de re-comenzar. Esta vez tratando de preguntar menos y aportar mas así que aquí os dejo mi "último proyecto" :D

EasyDomo (el nombre no es definitivo) es, en principio, una plataforma de domótica que permite, a través de netcat, un par de scripts y un sketch muy simple de arduino, controlar cualquier circuito eléctrico desde tu smartphone. (Digo en principio porque en la fase de desarrollo en que se encuentra solo se puede considerar un proyecto veraniego que enciende y apaga luces)

Dicho esto os dejo con un tutorial de instalación y uso:

   1- Monta un circuito de pruebas (no seas bestia y lo enchufes a el C1 de tu casa )
   Que se componga de 10 leds conectados (con sus resistencias y todo) a los pines    2,3,4,5,6,7,8,9,10 y 11 de tu arduino

       

   2-Si vas a instalar desde el .sfx (Archivo autoextraible de winrar) solo abrelo, te pedirá    privilegios de    administrador, acepta todo y espera, se te abrirá una ventana de comandos con    el programa de instalación que no tiene mucha ciencia. Te pedirá que aceptes y te pedirá    un usuario y una contraseña para logearte desde tu terminal mobil o desde donde quiera    que    accedas.



   Carga el sketch EasyDomo.ino (situado por defecto en tu carpeta de sketches de arduino o
   en el escritorio)

   Luego abre el archivo EasyDomoServer.bat COMO ADMINISTRADOR de tu escritorio y    te abrirá otra ventana donde te    
   pedirá que configures la instalación de tu hogar, circuito de pruebas en este caso.



   (Aquí está el truco) Una vez finalizado ese "asistente" vuelve a abrir el archivo    EasyDomoServer.bat y te dejará una ventana en negro

   Por motivos de seguridad la ventana deberá permanecer abierta mientras se desee conectar    remotamente

   Ahora solo tienes que accceder desde tu dispositivo (smartphone, otro pc, tostadora) con    netcat, telnet, lo que mejor te parezca. (yo uso netcat desde mi iphone 3gs con jailbreak)
   
   Conectandote al puerto 600 Ej. nc 192.168.1.34 600
   
   Una vez conectado te pedirá un nombre de usuario y una contraseña, introduce los mismos   
       que introduciste cuando instalaste EasyDomo y te aparecerá un menú de control muy básico    con el nombre de habitación y un identificador.
   
   Introduce el numero de identificación y accederás a un submenú desde el que podrás    encender luces y apagar luces (un poco básico no? ;D ) Una vez hecho eso el led asociado a    
   la habitación deseada se debería iluminar y apagar según queramos.




   Nota: Si quieres después de instalar puedes borrar la carpeta EasyDomo de tu carpeta    temporal
   3- Si vas a instalar desde el código fuente, opción perfectamente válida (incluso es    recomendable para evitar un bug que hace que detecte tu sistema como de 32 bits siempre)
   Solo ejectuta el archivo start.bat con privilegios de administrador u invoca el archivo    install.bat desde la linea de comandos (ADMINISTRADOR) con el parametro install

   Ej: install.bat install

   4-Para desinstalar: Solo ejecuta una el archivo install.bat en tu carpeta (archivos de    programa\EasyDomo) como administrador y sigue el asistente

   Nota: por si acaso no desinstala correctamente, la desinstalación manual pasa por:
   Borrar la clave de registro    HKML\SOFTWARE\EasyDomo
   Borrar la carpeta EasyDomo de archivos de programa
   Borrar el archivo EasyDomoServer.bat del escritorio
   Borrar el sketch EasyDomo.ino de la carpeta de arduino

   
Con esto os dejo los enlaces de descarga y os ruego que si alguno decide echarle un ojo que me comente, desde su opinión, hasta sugerencias pasando por reportes de bugs, lo que queraís. Sinceramente, me haría mucha ilusión :D

Links: https://www.mediafire.com/?x7wbaw6cy47viuk

Un saludo
#8
Edito: me equivoqué y postee 2 veces, podeis borrar este  :-X


Hola a todos.

Hacía ya mucho tiempo que no entraba al foro, y mucho mas que no aportaba nada.
Hasta ayer, cuando a raíz de una pregunta que hice, me entro el gusanillo de re-comenzar.
Esta vez tratando de preguntar menos y aportar mas así que aquí os dejo mi "último proyecto" :D


EasyDomo (el nombre no es definitivo) es, en principio, una plataforma de domótica que permite,
a través de netcat, un par de scripts y un sketch muy simple de arduino, controlar cualquier circuito eléctrico desde tu smartphone.
(Digo en principio porque en la fase de desarrollo en que se encuentra solo se puede considerar un proyecto veraniego que enciende y apaga luces)

Dicho esto os dejo con un tutorial de instalación y uso:

   1- Monta un circuito de pruebas (no seas bestia y lo enchufes a el C1 de tu casa )
   Que se componga de 10 leds conectados (con sus resistencias y todo) a los pines    2,3,4,5,6,7,8,9,10 y 11 de tu arduino

   2-Si vas a instalar desde el .sfx (Archivo autoextraible de winrar) solo abrelo, te pedirá    privilegios de
       administrador, acepta todo y espera, se te abrirá una ventana de comandos con el programa de instalación que no tiene mucha ciencia.
       Te pedirá que aceptes y te pedirá un usuario y una contraseña para logearte desde tu terminal mobil o desde donde quiera que accedas.

   Carga el sketch EasyDomo.ino (situado por defecto en tu carpeta de sketches de arduino o en el escritorio)

   Luego abre el archivo EasyDomoServer.bat COMO ADMINISTRADOR de tu escritorio y te abrirá otra ventana donde te    
   pedirá que configures la instalación de tu hogar, circuito de pruebas en este caso.

   (Aquí está el truco) Una vez finalizado ese "asistente" vuelve a abrir el archivo EasyDomoServer.bat y te dejará una ventana en negro

   Por motivos de seguridad la ventana deberá permanecer abierta mientras se desee conectar remotamente

   Ahora solo tienes que accceder desde tu dispositivo (smartphone, otro pc, tostadora) con netcat, telnet, lo que mejor te parezca
       (yo uso netcat desde mi iphone 3gs con jailbreak)
   
   Conectandote al puerto 600 Ej. nc 192.168.1.34 600
   
   Una vez conectado te pedirá un nombre de usuario y una contraseña, introduce los mismosque introduciste cuando instalaste EasyDomo y te aparecerá un menú de control muy básico
   con el nombre de habitación y un identificador.
   
   Introduce el numero de identificación y accederás a un submenú desde el que podrás
encender luces y apagar luces (un poco básico no? ;D ) Una vez hecho eso el led asociado a    
   la habitación deseada se debería iluminar y apagar según queramos.

   Nota: Si quieres después de instalar puedes borrar la carpeta EasyDomo de tu carpeta    temporal
   3- Si vas a instalar desde el código fuente, opción perfectamente válida (incluso es    recomendable para evitar un bug que hace que detecte tu sistema como de 32 bits siempre)
   Solo ejectuta el archivo start.bat con privilegios de administrador u invoca el archivo    install.bat desde la linea de comandos (ADMINISTRADOR) con el parametro install

   Ej: install.bat install

   4-Para desinstalar: Solo ejecuta una el archivo install.bat en tu carpeta (archivos de    programa\EasyDomo) como administrador y sigue el asistente

   Nota: por si acaso no desinstala correctamente, la desinstalación manual pasa por:
   Borrar la clave de registro    HKML\SOFTWARE\EasyDomo
   Borrar la carpeta EasyDomo de archivos de programa
   Borrar el archivo EasyDomoServer.bat del escritorio
   Borrar el sketch EasyDomo.ino de la carpeta de arduino

   
Con esto os dejo los enlaces de descarga y os ruego que si alguno decide echarle un ojo que me comente, desde su opinión, hasta sugerencias pasando por reportes de bugs, lo que queraís. Sinceramente, me haría mucha ilusión :D

Links:

Un saludo
#9
Que grande Elektro. Muchas gracias!

Edito: cuando tenga todo hecho os subo el code, que me entró el gusanillo de volver a la comunidad
#10
Hola. (no me creo que haya pasado tanto tiempo desde mi último mensage en el foro)

estoy creando un instalador para un software de domótica con arduino, la cuestión es que el firmware (hecho en C) necesita los caracteres <> para las librerías

#include <loquesea.h>

el problema es que con el método de escritura que uso con batch esos caracteres se usan para indicar el final de la cadena a escribir.

echo loquesea > archivo.txt

En vista de esto se me ocurrió meter esas líneas entre comillas.
Pero claro, ahora la duda es como quitarlas de el archivo final, estuve leyendo el famoso "acciones sobre archivos de texto" de Leo gutierrez en este foro pero no encontré nada que me valiese.

Me vale cualquier método para quitar esas comillas o escribir los símbolos en el archivo sin que batch de problemas.

Gracias por adelantado
Salu2 (no me creo que haya pasado tanto tiempo desde mi último Salu2 en el foro)