Como programar sistema operativo desde cero de una computadora TTL

hola, colegas seguro mucho de ustedes han visto por ahí vídeos en Internet en donde aficionados construyen computadoras caseras usando solo lógica TTL , así como se hacían computadoras antes como el apple 1 o el mancintosh, ect. la duda que tengo es como hago para programar un sistema operativo suponiendo por ejemplo que tengo una computadora de 8 bits que puede ejecutar unas 5 o mas instrucciones (LOAD,STORE,ADD,JUMP,COMP,) que ya tenga algun medio de almacenamiento del Sistema operativo. como se hace por donde se empieza, como se hace para mandar datos a un TV o monitor y como seria la tarjeta que genera los gráficos, etc.ejemplo o paginas serian de mucha ayuda. estoy preguntando esto por que ya empece a diseñar una computadora de 8 bits pero solo voy por la unidad de control y lo estoy haciendo en proteus posiblemente a finales de este año ya la tenga finalizada.y cuando ya finalice el hardware entonces quiero empezar por el software. me gustaria subir avances de mi proyecto pero no tengo mucho hecho. ...
 
Hola!

Sí, se puede hacer una mini PC con puro TTL y CMOS o una combinación de ambos. Programarlo, pues es depende en qué memoria EEPROM vas a programar el sistema operativo. PEEERO otra cosa, con sólo 5 instrucciones no podrás hacer mucho, te lo digo porque también tengo varias teorías para armarme mi procesador de 8 bits y necesitas una variedad de instrucciones. En mi modelo teórico, emplea 112 instrucciones, en un principio no eran más de 20, pero a falta de estas en algunos programas teóricos, pues es necesario aumentar el set.
Para mandar datos a una TV o una pantalla, deberás elegir el medio por el cual transmitirás los datos y tendrás que estudiar el protocolo de comunicación, cosa que con pocas instrucciones, sinceramente no creo que logres.
Bueno, la unidad de control (yo la llamo UCD), preferiblemente que sea microprogramada, ya que si hay errores a la hora de ejecutar un programa, puedes modificar el contenido si el error viene de la UCD.

Este es un tema un tanto complejo, puedes basarte en el intel 8085 como yo lo hice, pero por falta de $$, pues no puedo completar este gran proyecto :)

Salu2!

Estaría bien que subas el set de instrucciones que emplea ;)
 
Yo soy uno de esos aficionados :LOL:, bueno para empezar revisa los integrados tipo ALU como el 74LS181 y oberva su circuiteria interna para que te hagas una idea de como enfrentar tu proyecto. Creo recordar que esa ALU hace sumas, restas, y operaciónes lógicas según un dato de entrada (instrucción). Pero concuerdo con el colega Domo en que necesitarás instrucciónes mucho más poderosas si es que pretendes controlar periféricos.

¿No has pensado en mejor usar un viejo procesador para desempeñar las tareas que quieres y concentrarte en la interconexión con memorias y periféricos?

Si recordamos, las computadoras que mencionas se basaban en procesadores integrados, las pioneras que no utilizaban CPU's carecian de SO y sólo se comunicaban al exterior con leds y botoncitos.
 
Me gustaria aclarar terminos... lo que quieres programar es un Sistema Monitor no un Sistema Operativo.....

Un monitor es la forma mas primitiva de un sistema operativo... te permite cargar cierto tipo de programas y correrlos, pero a diferencia de un Sistema Operativo perderas el control del CPU cada vez que ejecutes un programa
 
Coincido ampliamente con Daniel Meza. Revisa los datasheets de estos circuitos además del 74LS181:

74LS373, te servirá para la pila, el stack pointer y el banco de registros, incluido el registro de instrucciones
74LS138, si optas por la UCD microprogramada, éste te servirá mucho para seleccionar las instrucciones. Con éste harás un decodificador tan grande como necesites, limitado por la cantidad de bytes de la instrucción. Típicamente son 8 bits, así que te alcanza para 256 instrucciones, o una cantidad menor, pero con instrucciones con varias microinstrucciones.
74LS193, es el que pretendo usar para el Program Counter de 24 bits, lo puedes programar fácilmente para saltos, retornos y llamadas a subrutinas.
Veré si me acuerdo de más para que te vayas familiarizando más. Y no lo abandones así "nomás", este es un proyecto que todo aficionado a los TTL quisiera hacer! :)

Para la UCD podrías usar una matriz de diodos, porque una EEPROM para esto deberá ser grande y será muy lenta porque deberá "reconstruir" la instrucción que puede ser de hasta 60 bits por cada línea a controlar de cada circuito integrado.
Yo tengo por ahí un set de instrucciones que desarrollé para esto, aunque son muy para mi modelo teórico, podrías basarte también en él, sólo dejame encontrarlo.

Para un acceso más rápido a periféricos, no multiplexes los buses de la ROM del programa y de los buses a los periféricos, pues debes hacer una parte de la UCD para que al finalizar la instrucción vaya la ROM del programa a buscar la nueva instrucción, lo cual puede hacerlo más tardado, pues se comparte un bus para programa y periféricos. Mejor un bus especial para la ROM y el otro para periféricos. Optimizas un poco el funcionamiento del procesador.

Y para periféricos deberás emplear instrucciones como:

Lea el dato de la dirección * del periférico ** y almacénelo en el acumulador
Escriba el dato * en la dirección ** del periférico ***

También deberás implementarte un buen control de interrupciones, que sea capaz de respaldar las instrucciones ejecutadas durante la instrucción para ceder el CPU a la interrupción. Si piensas manejar varios periféricos, deberás hacerte un control de interrupciones grande.

Y no te olvides del circuito de reset!

Un sistema operativo lo veo un tanto complicado, pues es el que se encarga de administrar el hardware, además de que deberás hacerlo del tipo Multitarea el CPU. Unos cuantos comandos para ejecutar ciertos programas sería suficiente.
 
Hola Grafeno94

Para programar un sistema operativo se requiere un medio de almacenamiento, por ejemplo: una memoria ROM, Un disco duro, Etc.
Pero . . . Antes se requiere un programa que normalmente se le denomina Input-Output System.
Este programa se encarga de “Entender” los dispositivos de entrada y salida:
Dispositivos de entrada:
Teclado.
Discos flexibles o duros, DVD, Etc.
Dispositivos de salida:
Pantalla
Display de 7 Segmentos
Bocina.
Luces indicadoras Etc.

Entonces: por medio del teclado instruyes al sistema que guarde el contenido en el disco flexible en la memoria ROM iniciando en x dirección.
Ese archivo que se graba en la memoria ROM será el sistema operativo con el cual tendrá más opciones, precisamente, de operación.

Un sistema de desarrollo lo puedes estudiar analizando el manual que aparece en este enlace:
http://issuu.com/old-computers/docs/motorola_mek6802d5_microcomputer_evaluation_board_

saludos
a sus ordenes
 
Sabes, mejor deja de lado por un momento la idea de un sistema operativo, es muy complejo aunque sea de 8 bits y simple.

A mí se me ocurría hacer un programa que sería el principal, que equivale casi a un SO, pero en él podías acceder al programa que necesites (ejemplo: Inicio de Windows), lo ejecutas y si necesitas otro puedes cerrar el actual si lo quieres así como Monotarea (se ahorra más programa, pero sólo te permite uno a la vez) o puedes hacerlo Multitarea y los programas se comportarían como llamadas a subrutinas del programa principal, y mediante un menú podrías regresar al programa inicial y podrías acceder al programa que abriste primero, pero sin iniciar un nuevo proceso (subrutina).
Pero supongamos que te quieras hacer un programa estilo bloc de notas, ahí deberás tener una EEPROM como Disco Duro para almacenar el dato y, supongamos que quieras crear o necesites tener varios archivos en una misma memoria, ah pues puedes hacer un poquito más complejos los archivos y en vez de guardar puro código ASCII, tendrás que implementarle un encabezado de archivo para identificarlos (equivale al formato de un archivo [txt, jpg, doc, pdf, pcb...) y si quieres acceder a la memoria con los archivos, pues sólo lo abres y el programa principal se encarga de ejecutar el programa necesario.

Pues ya parece más un sistema operativo, pero muuuuy simple. Tratando de emplear el menor espacio posible para que quepan todos los programas en una misma EEPROM.

Es una idea loca, pero podría funcionar :D

Salu2!

Ahh, eso sí, el Programa Principal será el encargado del hardware, sería también como el programa que menciona MrCarlos, ya que el programa ejecutado no se pondrá a ver que se está usando y que no, el programa principal se debe encargar de todo esto.
 
Última edición:
jaja antes de decir DVD ,floppy y cosas absurdas

hay que hacerle caso a Daniel Meza es el amo y señor de las computadoras caseras me ayudo a medio hacer la mia que la tengo botada en un protoboard.

antes que nada yo pensaba que armar el hardware es seguir un diagrama taringuero
pero la verdad no es asi.

hay que pensar lo siguiente:
¿que nesesito?
¿que circuito hace lo que quiero?
¿como voy a grabar una memoria? esto es lo mas frustrante
¿una ve que tengo solucionado debo saber programar?

y si para hacer algo interesante y que casie sea una obra de arte
hay que tener mucha experiencia en la logica de programacion
entre ellas saber NO trabar la maquina como es el caso de los DELAY cicles
saber hacer multiples tareas:
como leer escribir sumar etc.

y ya teniendo una pulida forma de programacion uno puede comenzar a construir su computadora casera con un CPU. como es el caso del 6502, 8080 o el clasico Z80

y si eres muy ducho arnando y desarmando tu propio Hardware
puedes seguir por hacer tu propio CPU

pero para eso DEBES APRENDER A GRABAR UNA MEMORIA EPROM por que es lo que mas nos limita al momento de hacer una computadora casera
 
bueno antes de discutir si esta es la mejor
estas personas son muy duchas en la programacion como para hacer su propio compilador , si es un compilador ASM casi no hay dificultad de hacer uno.

pero hay quienes hacen su computadora y su propio compilador en C!!
este es un ejemplo de una maquina de compuertas 74ls
http://www.homebrewcpu.com/
la maquina se llama MAGIC1
carga su programa desde un disco duro

pero como digo antes de emocionarse
estas personas saben perfectamente como programar y sobre todo hacer una lectura de un disco duro no es algo facil si se desconoce el protocolo FAT

cuando alguien solo sabe prender y apagar un led y un rele usando indiscriminadamente el uso del DELAY
pues estamos muy lejos de hacer un sistema operativo.

y si nuestra gran asaña fue poner hola mundo en el RS232 o en una LCD
pues al ver un proyecto como este creo que sera todo un problema
:LOL: solo es una critica constructiva
 
mmmm viendo los comentarios voy a tomar las cosas con suavidad. en ves de utilizar un
tv o monitor para observar resultados voy a utilizar leds para que visualicen los datos en
binario.y en ves de hacer un sistema operativo voy a tratar de hacer un compilador pero
esto lo hare cuando ya este un poco mas avanzado en el tema. tengo una duda; cuando se dice
que una cpu es de 8 bits esto hace referencia al ancho de palabra o al ancho de bus de la cpu?,
como hace la cpu para diferenciar una instrucción de un dato?, según lo que dijo
un colega en su comentario si la computadora es de 8 bits puede entonces usarse 256
instrucciones posibles pero en donde se meten los datos para operar con esas instrucciones.
y que pasa si en una computadora de 8 bits yo quiero hacer una multiplicacion
como 2500*2500 = 6250000 puede hacerse eso donde metería ese numero?
 
mas o menos estas en lo cierto pero no

una computadora de 8 bits si usa intrucciones de 255 combinaciones pero los CPUs antiguos si tenian instrucciones mas complejas
llamadas OPCODES y estos opcodes eran de 2 a 4 instrucciones es decir para ejecutar un OPCODE de 4 intrucciones necesitabas al menos 4 ciclos de reloj + el dato que hivas a computar.

y asi los pic por tener solo 35 intrucciones uno se arrancaba el cabello para hacer algo simple y despercdiciaba uno ciclos de reloj para hacer algo con un monton de intrucciones poco poderosas
por eso los pic compensaban ese desperdicio de ciclos de reloj con velocidades de reloj muy altas.

y los CPUs con los OPcodes tenian instrucciones que de una sola instruccion podias hacer muchas cosas
como es el caso de los AVR que tienen muchas intrucciones de ensamblador.
por eso encuentras AVRs que tiene poca velocidad de reloj.

que un CPU sea de 8 bits no significa que sea malo mas bien es la pregunta
¿que uno quiere hacer y como uno lo puede resolver?
asi uno escoje el CPU indicado
 
Hola, si una CPU tiene un rango de 8bits, se refiere a la cantidad de bits que puede procesar simultáneamente. Esto no quiere decir que el BUS sea de 8bits, ya que puede armarse bloques y poder trabajar con 64, 128, 256, etc. bits. lo que acarrea una inversión de tiempo mayor de ejecución, para lograrlo. Para realizar una operación de producto como el ejem. que propones, puede realizarse con un rango de 8 bits, sólo que el calculo se hace por partes, y el resultado se almacena también en bloques de 8bits por ejem.
 
Última edición:
Otra cosa, recuerda que una cpu es un circuito secuencial y combinacional, por eso sabe diferenciar entre un dato o instrucción. Recibe la instrucción y altera algunos flip flops para que la siguiente lectura sea interpretada como dato
 
bueno colegas para concluir por el momento este tema quiero que me aclaren unas dudas. yo estoy haciendo la unidad de control cableada utilizando lógica secuencial y combinacional. esto lo estoy haciendo en papel y simulaciones en proteus. ahora, estoy utilizando una maquina de estado tipo mealy para generar las señales de control entonces que entradas deveria tener esta maquina de estado?. por lo que he averiguado es el código de operación que le da al decodificador. no entiendo muy bien como funciona el decodificador , según lo que he leído , lo que hace es separar el codigo de operación de la palabra y mandarla a la unidad de control y la dirección de memoria no se a donde va a parar. es así?. ahora como hago para manejar las interrupciones y el sistema de entrada/salida ( mostrar resultado de operaciones)¿podría utilizar algún tipo de registro en el que sus salidas estén conectadas a unos leds?
 
Si el incentivo está en armar un controlador a base de elementos sencillos y de implementar un sistema operacional propio y un interpretador o compilador, yo no me iría por el camino de usar componentes lógicas discretas. Yo lo haria usando un FPGA. En si contiene lo que usaríamos armando un controlador a base de componentes discretas.
Refiriéndome a la contribución mas arriba sobre Monitor y sistema operacional, me gustaría compartir mi propia experiencia. Un sistema operacional sencillo y poderoso que cumple con la definición de sistema operacional definido mas arriba son las viejas versiones del sistema operacional del Macintosh, básicamente las versiones previas a la version 7. Yo como Field Application Engineer y luego como jefe de laboratorio implementé y deje implementar el sistema de manejo de los recursos como se usaba entonces. Los libros de "Inside Macintosh" en especial el tomo 1 son una fuente invaluable de información!
 
Atrás
Arriba