Mini PC desarrollada en lógica discreta

Volviendo al tema, este es uno de esos proyectos que te dejan sin palabras. Lo único que se puede llegar a decir es GUAU!
La verdad, desde que vi este proyecto quedé impresionado. No solo por lo titánico del trabajo, sino por el desarrollo en sí mismo. No creo en eso de que solo tiene fines didácticos, o que se reinvente la rueda, creo que rompe los paradigmas y las trabas autoimpuestas de cualquiera en este mundo de gigantes de la tecnología y no por lo que puede hacer, sino porque "se puede hacer". Es como una liberación que te dice: él lo hizo solo, entonces otros (por qué no yo?) quizás puedan hacerlo también. Los videos del paso a paso no te dicen todos pueden, obviamente hay estudios, conocimiento y dedicación pero te dejan la puerta abierta a la libertad de hacer cualquier cosa. Este proyecto dice yo te abro la puerta, atravesarla depende solo de tus ganas.
GRACIAS Gudino Roberto, de verdad gracias!!!
Un abrazo cordial desde Catamarca, Argentina.
 
Volviendo al tema, este es uno de esos proyectos que te dejan sin palabras. Lo único que se puede llegar a decir es GUAU!
La verdad, desde que vi este proyecto quedé impresionado. No solo por lo titánico del trabajo, sino por el desarrollo en sí mismo. No creo en eso de que solo tiene fines didácticos, o que se reinvente la rueda, creo que rompe los paradigmas y las trabas autoimpuestas de cualquiera en este mundo de gigantes de la tecnología y no por lo que puede hacer, sino porque "se puede hacer". Es como una liberación que te dice: él lo hizo solo, entonces otros (por qué no yo?) quizás puedan hacerlo también. Los videos del paso a paso no te dicen todos pueden, obviamente hay estudios, conocimiento y dedicación pero te dejan la puerta abierta a la libertad de hacer cualquier cosa. Este proyecto dice yo te abro la puerta, atravesarla depende solo de tus ganas.
GRACIAS Gudino Roberto, de verdad gracias!!!
Un abrazo cordial desde Catamarca, Argentina.
Woww! Imposible no responder a un mensaje así!
Sinceramente! Muchas gracias por tu comentario, al igual que a muchas personas que han visto éste proyecto!
Creo que como bien dices! La perseverancia está por encima de todo.
Conocimiento más o conocimiento menos, sólo puede demorar en mayor o menor medida realizar algo! Lo que sea. Pero la constancia es el motor de todo. Y eso motiva a que cualquiera pueda encarar sus metas, sin considerar su conocimiento.
Gracias nuevamente por tus palabras, que empujan a continuar con mi motivación!
Abrazo grande! Desde Córdoba, Argentina!
 
El software como lo escribes?
Hay varias maneras, ninguna fácil.

Todo apuntando a construir la ROM para el bootstrap (tirabotas) , que ponga en arranque al procesador e intente cargar algún sistema operativo desde algún origen, pero no cualquier sistema. Tiene que estar escrito en leguaje de maquina, que el procesador pueda interpretar.

a- Se pueden usar muletas, de algún sistema operativo y lenguaje pre existente, lo cual ahorra mucho tiempo, o sea, dinero.

b- desde cero, si el paquete de instrucciones va a ser uno propio, para un procesador discreto que uno inventa. Este es el mas difícil, el que nadie quiere hacer. ;) 🤣

Es como andar en selva espesa.
Uno empieza arrastrando se con el machete en la boca , luego de rodillas, luego se pone de pie, después pasito a pasito, luego un paso y después el otro , hasta empezar a caminar. Ahí comienza la parte mas divertida, si se quiere.

Si se uso como " muleta ", algún lenguaje con compilador - ensamblador, después hay que pasarlo a HEXA para poder grabar una EPROM de arranque, compatible con el WORD de nuestra CPU primitiva, sea en 4 bits (nibble) , en 8 (byte), etc.
Lógico que antes que todo esto, hay que INVENTAR el circuito eléctrico.
Es un montón de laburo, sin entrar a hablar de las herramientas de contexto del sistema operativo. Es decir los llamados COMANDOS (edit, delete, format , etc, etc)

Podría escribir horas y el señor Gudino x años.

Para ahorrar tiempo, hace muchos años, con amigos, preparamos un ordenador, que accedía a una interfase, que simulaba ser una EPROM y ésta, se insertaba en el zócalo de otro ordenador donde iba emplazada una EPROM REAL, simulando ser su Bootstrap. 🤣

Entonces era muy fácil modificar el boostrap, corregirlo, porque en realidad era una RAM, que simulaba ser una EPROM.
De ésta manera, no había que esperar a quemar la EPROM para ver los resultados.
En la máquina A, hacíamos las modificaciones, transferíamos a la RAM simuladora y reseteábamos la máquina B para ver resultados de las modificaciones.
De paso, nos quedaba registro de toda la corrida, cual si fuera un LOGIC ANALIZER , de hecho lo era, de esa manera, se avanzaba rápido, para hacer ingeniería directa o inversa, según el caso.

Que años. !;)
 
El software como lo escribes?
El soft hasta el momento lo escribo en lenguaje máquina(propio de la arquitectura)
Pero estoy trabajando en un intérprete de C.
Hay varias maneras, ninguna fácil.

Todo apuntando a construir la ROM para el bootstrap (tirabotas) , que ponga en arranque al procesador e intente cargar algún sistema operativo desde algún origen, pero no cualquier sistema. Tiene que estar escrito en leguaje de maquina, que el procesador pueda interpretar.

a- Se pueden usar muletas, de algún sistema operativo y lenguaje pre existente, lo cual ahorra mucho tiempo, o sea, dinero.

b- desde cero, si el paquete de instrucciones va a ser uno propio, para un procesador discreto que uno inventa. Este es el mas difícil, el que nadie quiere hacer. ;) 🤣

Es como andar en selva espesa.
Uno empieza arrastrando se con el machete en la boca , luego de rodillas, luego se pone de pie, después pasito a pasito, luego un paso y después el otro , hasta empezar a caminar. Ahí comienza la parte mas divertida, si se quiere.

Si se uso como " muleta ", algún lenguaje con compilador - ensamblador, después hay que pasarlo a HEXA para poder grabar una EPROM de arranque, compatible con el WORD de nuestra CPU primitiva, sea en 4 bits (nibble) , en 8 (byte), etc.
Lógico que antes que todo esto, hay que INVENTAR el circuito eléctrico.
Es un montón de laburo, sin entrar a hablar de las herramientas de contexto del sistema operativo. Es decir los llamados COMANDOS (edit, delete, format , etc, etc)

Podría escribir horas y el señor Gudino x años.

Para ahorrar tiempo, hace muchos años, con amigos, preparamos un ordenador, que accedía a una interfase, que simulaba ser una EPROM y ésta, se insertaba en el zócalo de otro ordenador donde iba emplazada una EPROM REAL, simulando ser su Bootstrap. 🤣

Entonces era muy fácil modificar el boostrap, corregirlo, porque en realidad era una RAM, que simulaba ser una EPROM.
De ésta manera, no había que esperar a quemar la EPROM para ver los resultados.
En la máquina A, hacíamos las modificaciones, transferíamos a la RAM simuladora y reseteábamos la máquina B para ver resultados de las modificaciones.
De paso, nos quedaba registro de toda la corrida, cual si fuera un LOGIC ANALIZER , de hecho lo era, de esa manera, se avanzaba rápido, para hacer ingeniería directa o inversa, según el caso.

Que años. !;)
Pues!!! Ni que hubieras estado en mis zapatos!
😂
Es tal cuál lo describes, aquí no hay ni huevo ni gallina!
Como me dice mi Sra. Aguánteselas mijo'! Que nadie lo mandó a hacer eso!😂
Bien, pues si. El mecanismo para hacer algo propio, NO tiene alternativas de atajo.
A remarla desde cero!
Y añadiendo un poco más.
El intérprete de C,.tiene que compilar en un pseudocódigo, para que al cargarlo en RAM, el programa interno del firmware, contiene el programa que se encarga de ejecutar al pseudocódigo!
Ésto tiene dos ventajas, y es que el pseudocódigo ocupa muy poco espacio.
Y por otro lado, todas las señales del procesador quedan abstraidas de ser controladas por el programador.
El inconveniente, es que la ejecución es más lenta, porque un código base ejecuta a otro código de mayor nivel, como si se tratase de una máquina virtual.
 
Última edición:
El soft hasta el momento lo escribo en lenguaje máquina(propio de la arquitectura)
Pero estoy trabajando en un intérprete de C.

Pues!!! Ni que hubieras estado en mis zapatos!
😂
Es tal cuál lo describes, aquí no hay ni huevo ni gallina!
Como me dice mi Sra. Aguánteselas mijo'! Que nadie lo mandó a hacer eso!😂
Bien, pues si. El mecanismo para hacer algo propio, NO tiene alternativas de atajo.
A remarla desde cero!
Y añadiendo un poco más.
El intérprete de C,.tiene que compilar en un pseudocódigo, para que al cargarlo en RAM, el programa interno del firmware, contiene el programa que se encarga de ejecutar al pseudocódigo!
Ésto tiene dos ventajas, y es que el pseudocódigo ocupa muy poco espacio.
Y por otro lado, todas las señales del procesador quedan abstraidas de ser controladas por el programador.
El inconveniente, es que la ejecución es más lenta, porque un código base ejecuta a otro código de mayor nivel, como si se tratase de una máquina virtual.
De hecho, yo diria que lo es (E mula) 🤣
 
Ya se todo lo que me dicen, yo también he hecho mi computadora basada en Z80.
Pero yo uso un ensamblador que no hice yo.

Por eso tenía mi duda que si escribía todo el software a mano pelona.

En casos extremos he quemado PROMS Byte a byte manualmente, esa es la peor condición, cuando ni siquiera podes usar un ensamblador ajeno.
Es lo que nadie quiere pero a veces se te pone en medio. 🥴
 
Se puede hacer un ensamblador solo haciendo comparaciones de cadenas de texto en C++.
Digamos si encuentro un jump compara para ver si está bien escrito y lo reemplaza por un hexadecimal.

Ejemplo


cadena="jump";

Si ("jump" = cadena)
Pone 0x00

Es muy burdo lo que pongo pero no creo que sea tan difícil.
Exacto!!!! Bueno de hecho, es así.
En el intérprete que estoy trabajando, se complica bastante cuándo se invoca a un elemento de un array, por ejem. A {b}.(usé llaves, porque, la plataforma del foro, interpreta a los corchetes, como elementos de texto.)
Volviendo, primero debe detectar que "b" es una variable, luego acceder a su valor, y usarlo como "sumando" al puntero de dirección de A.
Es engorroso, pero se puede.
Se complica aún más, cuándo debe reasignar por ejem, VAR{r}=TITO{f}.
 
Última edición:
El intérprete debe traducir la sintaxis C, en un pseudocódigo. Bueno, esa sería la idea.:unsure:
Caso contrario, armar un intérprete de ASM a pseudocódigo, que es mucho más simple.
Cuándo tenga algo más o menos presentable, lo subo en video para que puedan ver cómo trabaja.
Hasta el momento, lo más eficiente que logré en éste compilador es:
Por ejem. si tenemos que A=b+c-d*4/t.
Cuándo accede a la dirección de A, genera un registro que lo llamé TOTAL y luego todo lo que venga luego del símbolo igual, es cálculo. Ya sea con constantes o variables, y genera un registro llamado PARCIAL, entonces cuándo se encuentra con un +, -, * o /. sabe que el sig. elemento debe aplicar la operación necesaria con PARCIAL.
Lo malo de ésto es que no distingue prioridad de cálculo. Pero bueno, los avances son así.:cry: No se puede todo de una!
 
Última edición:
Yo creo que para hacer que detecte prioridad de operaciones aritméticas hay que ir apilando los operadores y cuando se encuentra uno de mayor prioridad atacar la operación hasta llegar de la menor prioridad.

No se haciendo tokens y apilar, un contador de prioridades.

Se me ocurre.

No sé si ya tengas funcionando un analizador léxico y un sintactico.
 
Yo creo que para hacer que detecte prioridad de operaciones aritméticas hay que ir apilando los operadores y cuando se encuentra uno de mayor prioridad atacar la operación hasta llegar de la menor prioridad.

No se haciendo tokens y apilar, un contador de prioridades.

Se me ocurre.

No sé si ya tengas funcionando un analizador léxico y un sintactico.
La idea es genial!!!
Respondiendo a tu pregunta, básicamente hay una parte que detecta cadenas de instrucciones como declaración de variables, "int, if, printf()", etc. Por otro lado hay un detector de fin de línea";"
Y por otro lado, detecta cuándo un string es cadena de una variable y cuándo es una cadena de números, para transformarlo en un valor numérico.
También elimina los espacios para manejar todo más compacto.
De hecho hay muchas cosas por hacer.
Hasta el momento, el analizador de texto, detecta cadenas de operaciones con variables de longitud indefinida.
Incluso puede operar con arrays por ej.
A{x}=J{3}-B{h}*Y+1;
Ésta es la parte más compleja, porque en los cálculos parciales hay un elemento array, uno con puntero variable y otro con constante, más una variable y una constante.
El sig. paso, es traducir ésto a pseudocódigo.
 
Última edición:
Woww! Imposible no responder a un mensaje así!
Sinceramente! Muchas gracias por tu comentario, al igual que a muchas personas que han visto éste proyecto!
Creo que como bien dices! La perseverancia está por encima de todo.
Conocimiento más o conocimiento menos, sólo puede demorar en mayor o menor medida realizar algo! Lo que sea. Pero la constancia es el motor de todo. Y eso motiva a que cualquiera pueda encarar sus metas, sin considerar su conocimiento.
Gracias nuevamente por tus palabras, que empujan a continuar con mi motivación!
Abrazo grande! Desde Córdoba, Argentina!

Juajua!! Pensé que eras europeo, jajja.
Abrazo vecino!!! 🤣
(Yo viví 12 años en Nva Cba)
 
Atrás
Arriba