Acerca de mi

Mi proyecto personal es construir un computador desde cero, por el simple placer de hacerlo, sin prentensión de lógica, utilidad o conveniencia. Este incluye la creación de herramientas de desarrollo y un intérprete Forth, todo escrito desde cero. 

Este proyecto es realizable fisicamente usando contadores, buffers y otros chips montados sobre breadboards, protoboards o incluso sobre PCB a la medida, pero las conexiones problemáticas, los ruidos espurios, los errores y los chips defectuosos son cosa segura. 

Opte por una FPGA como medio físico.

Primer use un fork de Logisim para construir una CPU a punta de contadores, registros, puertas lógicas y multiplexores. Ensamble a mano e ingrese los programas byte a byte en la RAM. Los depure midiendo los niveles lógicos en los pines.

Luego me pase a Verilog. Hice la CPU J1s a partir de la J1, portando el diseño a la FPGA IceSugar, simplificando la memoria y agregando dos nuevas instrucciones (salto/call base+desp).

El resultado es un pequeño MCU de arquitectura Von Neuman, con 4096 celdas (16 bits) de RAM, dos stacks fuera de RAM, sin interrupciones ni excepciones, sin flag de carry ni registro de condición y con un juego mínimo de instrucciones fuertemente orientadas a Forth.

El siguiente paso fue escribir el software. Primero, un simple ensamblador de dos etapas. Simple, porque tiene lo estrictamente necesario para compilar el kernel de Forth. Produce directamente la imagen de memoria a cargar.

Inicialmente pensaba depurar el software en el hardware final, luego opte por escribir un emulador (en Python) para acelerar las pruebas. Con un emulador es posible poner breakpoint, analizar la memoria, tracear la ejecución, lo que sería imposible en el hardware real.

El kernel de Forth, el código mínimo que puede ejecutar Forth está 100% operativo y en la etapa de las optimizaciones. Está escrito en assembler y ocupa alrededor de 1.500 celdas.

El kernel carga el interprete Forth, escrito en Forth. Finalmente quedan una 1000 celdas disponibles de las 4096 que tiene la tarjeta.

El interprete implementa la mayoría del core del standard Forth. En esta etapa estoy revisando que la implementación se ajuste a las especificaciones.


Este sitio lo uso para acumular notas sobre el desarrollo e implementación de Forth, como material de referencia para cualquiera que quiera analizar los fuentes del proyecto (estarán disponibles a futuro).

No hay comentarios.:

Publicar un comentario