Desde ViejuNET queremos presentaros un proyecto del que yo personalmente llevaba tiempo atras, la creacion de un computador de proposito general desde 0.
Este sistema, creado con la inestimable ayuda de zako es un computador completo con un procesador de creacion propia de 32 bits, Ithladin.
Aqui teneis un video del sistema arrancando y corriendo el Pong:
http://tube.vieju.net/video/PCP-Pong-minidemo/a33827d7e290bd3d36ae7f50f99112ee
Para mas info aqui esta su blog de desarrollo:
http://pcp.vieju.net/
PCP, el Pequeño Computador Personal
- mentalthink
- Amiga 2500
- Mensajes: 2840
- Registrado: 11 Abr 2010, 15:06
- Gracias dadas: 45 veces
- Gracias recibidas: 14 veces
Re: PCP, el Pequeño Computador Personal
Que chulo JOJO, y puede representar colores graficos y demas cosillas... Muy chulo!!!, manténnos informados, al menos a mi me parece muy interesante.
- radastan
- Amiga 2500
- Mensajes: 4542
- Registrado: 11 Jun 2007, 19:29
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Sega Genesis/Megadrive
- Primera consola: TV Games/Pong Clone
- Ubicación: Córdoba
- Gracias dadas: 9 veces
- Gracias recibidas: 40 veces
- Contactar:
Re: PCP, el Pequeño Computador Personal
Al final todos teníamos la idea en mente...
¡Esperamos esquemas!

¡Esperamos esquemas!
Yo tengo una máquina del tiempo, se llama ZX Spectrum, siempre me devuelve a los buenos momentos.
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝
(\.../) (\.../) (\.../) (\.../)
( *.*) ('.'= ) ('.'= ) ('.'= )
(")_(") (")_(") (")_(") (")_(")
╔═══╦═══╦═══╦══╦══╗
║╔═╗║╔═╗║╔═╗╠╣╠╩╣╠╝
║║─║║╚══╣║─╚╝║║─║║
║╚═╝╠══╗║║─╔╗║║─║║
║╔═╗║╚═╝║╚═╝╠╣╠╦╣╠╗
╚╝─╚╩═══╩═══╩══╩══╝
- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: PCP, el Pequeño Computador Personal
Y además esa especificación de procesador está pidiendo a gritos ser implementada de forma física en una FPGA (por la cantidad de registros no cabría en una CPLD)
(yo, como siempre, barriendo para casa
)
Preguntas:
- ¿Cuántos MIPS (millones de instrucciones por segundo) es capaz de ejecutar vuestra implementación en el AT Mega?
- ¿No habéis echado de menos otros tipos de saltos condicionales? Por ejemplo, tenéis un salto si mayor y otro salto si menor, pero ese "mayor" o "menor", ¿se refiere a números en complemento a dos o números en binario natural, sin signo? ¿Y un salto si overflow, o salto si signo?
- Las instrucciones de multiplicación y división, ¿producen resultados de 64 bits? ¿Tienen en cuenta el signo?
- Si todas las instrucciones ocupan 32 bits, la instrucción de carga inmediata, ¿cuántos bits puede cargar en un registro? (porque 32 no caben)
(yo, como siempre, barriendo para casa

Preguntas:
- ¿Cuántos MIPS (millones de instrucciones por segundo) es capaz de ejecutar vuestra implementación en el AT Mega?
- ¿No habéis echado de menos otros tipos de saltos condicionales? Por ejemplo, tenéis un salto si mayor y otro salto si menor, pero ese "mayor" o "menor", ¿se refiere a números en complemento a dos o números en binario natural, sin signo? ¿Y un salto si overflow, o salto si signo?
- Las instrucciones de multiplicación y división, ¿producen resultados de 64 bits? ¿Tienen en cuenta el signo?
- Si todas las instrucciones ocupan 32 bits, la instrucción de carga inmediata, ¿cuántos bits puede cargar en un registro? (porque 32 no caben)
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- JoJo
- Amiga 1200
- Mensajes: 1067
- Registrado: 03 Feb 2008, 22:45
- Sistema Favorito: PC
- primer_sistema: PC
- consola_favorita: Nintendo SNES
- Primera consola: (Otro)
- Gracias dadas: 29 veces
- Gracias recibidas: 87 veces
Re: PCP, el Pequeño Computador Personal
mcleod_ideafix escribió:Y además esa especificación de procesador está pidiendo a gritos ser implementada de forma física en una FPGA (por la cantidad de registros no cabría en una CPLD)
(yo, como siempre, barriendo para casa)
Preguntas:
- ¿Cuántos MIPS (millones de instrucciones por segundo) es capaz de ejecutar vuestra implementación en el AT Mega?
- ¿No habéis echado de menos otros tipos de saltos condicionales? Por ejemplo, tenéis un salto si mayor y otro salto si menor, pero ese "mayor" o "menor", ¿se refiere a números en complemento a dos o números en binario natural, sin signo? ¿Y un salto si overflow, o salto si signo?
- Las instrucciones de multiplicación y división, ¿producen resultados de 64 bits? ¿Tienen en cuenta el signo?
- Si todas las instrucciones ocupan 32 bits, la instrucción de carga inmediata, ¿cuántos bits puede cargar en un registro? (porque 32 no caben)
Si, es algo que tenemos en mente, el implementarlo en una FPGA en el futuro

- Pues no hemos hecho calculos. El Atmega rinde 1 MIPS por mhz, y esta a 16mhz, con lo que 16MIPS en crudo. La cpu funciona por emulacion, asi que habria que hacer calculos para determinar cuantas instrucciones se ejecutan realmente.
- De momento toda la implementacion es unsigned. No hay control de overflow.
- No, 32 bits, si hay overflow no esta controlado. No tengo pensamiento de añadir mas instrucciones condicionales, la idea es tener un juego de instrucciones muy reducido.
- Pues... 32 - 5 bits del coop - 4 bits del cod. registro, 23 bits en una carga directa... si quieres cargar un valor de 32 bits tendras que tirar de desplazamientos.
En todo caso todo esto es preliminar, es muy posible que cambie a C2 y para los resultados de 64 bits use un registro extra... ya iremos viendolo

- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: PCP, el Pequeño Computador Personal
Más preguntas:
- Si se usan 4 bits para especificar un registro, y los registros r14 y r15 son en realidad el puntero de programa y el puntero de pila... ¿serían equivalentes estas instrucciones? LW R14,Rx <--> JMP Rx (en tal caso podría suprimirse la instrucción JMP del repertorio de instrucciones porque es superflua)
- Si hay 5 bits para el código de operación y 4 bits para referenciar a un registro, la instrucción LD Rx,cte sólo puede almacenar una constante de 32-5-4=23 bits. ¿Cómo se almacenaría una constante más larga? EDITO: ya he visto tu respuesta
- La instrucción SYS tiene un parámetro que es un número, pero... ¿qué es ese número? ¿un índice a un vector de direcciones tal vez?
- ¿Cuál es el mapa de memoria del sistema y dónde empieza a ejecutarse?
- Si se usan 4 bits para especificar un registro, y los registros r14 y r15 son en realidad el puntero de programa y el puntero de pila... ¿serían equivalentes estas instrucciones? LW R14,Rx <--> JMP Rx (en tal caso podría suprimirse la instrucción JMP del repertorio de instrucciones porque es superflua)
- Si hay 5 bits para el código de operación y 4 bits para referenciar a un registro, la instrucción LD Rx,cte sólo puede almacenar una constante de 32-5-4=23 bits. ¿Cómo se almacenaría una constante más larga? EDITO: ya he visto tu respuesta
- La instrucción SYS tiene un parámetro que es un número, pero... ¿qué es ese número? ¿un índice a un vector de direcciones tal vez?
- ¿Cuál es el mapa de memoria del sistema y dónde empieza a ejecutarse?
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: PCP, el Pequeño Computador Personal
JoJo escribió:- De momento toda la implementacion es unsigned. No hay control de overflow.
Ouch! Sin números con signo (mejor dicho, sin instrucciones condicionales que contemplen el signo) será complicado escribir según qué programas.
JoJo escribió:- No, 32 bits, si hay overflow no esta controlado. No tengo pensamiento de añadir mas instrucciones condicionales, la idea es tener un juego de instrucciones muy reducido.
Nosotros usamos un procesador didáctico también estilo RISC, pocas instrucciones, pero nos hemos preocupado de poder añadirle este tipo de instrucciones. Hacer un compilador de C que genere código para nuestro procesador es más sencillo si cuentas con esas instrucciones.
JoJo escribió:- Pues... 32 - 5 bits del coop - 4 bits del cod. registro, 23 bits en una carga directa... si quieres cargar un valor de 32 bits tendras que tirar de desplazamientos.
O haces como en algunos procesadores, que tienen una instrucción de carga de media palabra en la mitad alta o baja del registro. Con dos instrucciones de carga has conseguido cargar un dato de 32 bits completo.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- JoJo
- Amiga 1200
- Mensajes: 1067
- Registrado: 03 Feb 2008, 22:45
- Sistema Favorito: PC
- primer_sistema: PC
- consola_favorita: Nintendo SNES
- Primera consola: (Otro)
- Gracias dadas: 29 veces
- Gracias recibidas: 87 veces
Re: PCP, el Pequeño Computador Personal
mcleod_ideafix escribió:Más preguntas:
- Si se usan 4 bits para especificar un registro, y los registros r14 y r15 son en realidad el puntero de programa y el puntero de pila... ¿serían equivalentes estas instrucciones? LW R14,Rx <--> JMP Rx (en tal caso podría suprimirse la instrucción JMP del repertorio de instrucciones porque es superflua)
- Si hay 5 bits para el código de operación y 4 bits para referenciar a un registro, la instrucción LD Rx,cte sólo puede almacenar una constante de 32-5-4=23 bits. ¿Cómo se almacenaría una constante más larga? EDITO: ya he visto tu respuesta
- La instrucción SYS tiene un parámetro que es un número, pero... ¿qué es ese número? ¿un índice a un vector de direcciones tal vez?
- ¿Cuál es el mapa de memoria del sistema y dónde empieza a ejecutarse?
- Si, seria equivalente, pero hemos añadido JMP por claridad


- No, virtualmente uno podria imaginarse que es como las INTs del pc, vector de interrupcion, destino de la rutina y volver... pero no, aqui esta creado todo por codigo dentro del Atmega. Puedes ver el fichero system.cpp de la implementacion.
- Lo mas simple posible, dado que no hay nada mapeado, ni vectores de interrupcion, ni I/O en memoria... el sistema arranca, carga el fichero bios.bin en la memoria desde 0x0, luego pone el PC en esa posicion y empieza a ejecutar.
- mcleod_ideafix
- Amiga 2500
- Mensajes: 5316
- Registrado: 06 Oct 2009, 04:12
- Sistema Favorito: Spectrum 16Kb/48Kb
- primer_sistema: Spectrum 16Kb/48Kb
- consola_favorita: Vectrex
- Primera consola: TV Games/Pong Clone
- Ubicación: Jerez de la Frontera
- Gracias dadas: 12 veces
- Gracias recibidas: 54 veces
- Contactar:
Re: PCP, el Pequeño Computador Personal
JoJo escribió:- Si, seria equivalente, pero hemos añadido JMP por claridadTambien podriamos haber suprimido SUB y forzar a restar con sumas
En el primer caso, ambos nmemónicos hacen exactamente lo mismo. Podrías usar una macro en el ensamblador que tradujera JMP por LD con el registro adecuado. Tardaría lo mismo y ocuparía lo mismo en memoria.
JMP [R5]: ocupa 32 bits. Carga en el registro contador de programa (RPC o R14) la palabra contenida en R5
LW R14,[R5]: ocupa 32 bits. Literalmente, carga la palabra contenida en R5 en R14 (RPC).
El segundo caso no es igual. Restar sumando implica calcular antes el complemento a 2 del sustraendo para poder sumárselo al minuendo. Calcular el complemento a 2 en vuestra CPU implica usar dos instrucciones: NOT (para calcular el complemento a 1) y ADD para incrementar el resultado.
SUB R1,R2,R3: ocupa 32 bits. Hace R3 := R1-R2
Su equivalente sin SUB sería:
NOT R2,R2 ;R2 complementado a 1
LD R3,1 ;Cargamos constante 1
ADD R2,R3,R2 ;Sumamos. Ahora R2 es el complemento a 2 de R2 original
ADD R1,R2,R3 ;Sumamos a R1 y resultado en R3
Ocuparía 128 bits, y tardaría, en principio, 4 veces más que el SUB original. SUB no sería superflua en este caso.
Recuerda: cada vez que se implementa un sistema clásico en FPGA, Dios mata a un purista
- JoJo
- Amiga 1200
- Mensajes: 1067
- Registrado: 03 Feb 2008, 22:45
- Sistema Favorito: PC
- primer_sistema: PC
- consola_favorita: Nintendo SNES
- Primera consola: (Otro)
- Gracias dadas: 29 veces
- Gracias recibidas: 87 veces
Re: PCP, el Pequeño Computador Personal
A ver, si, seria lo mismo, pero dado que la especificacion original dice que los registros de uso general son r0 - r13, rsp y rpc no deben de poder tocarse a mano.
En la implementacion actual si es asi, pero la idea es que no se puedan tocar como r14 y r15
En la implementacion actual si es asi, pero la idea es que no se puedan tocar como r14 y r15

Volver a “Otros microordenadores”
¿Quién está conectado?
Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados