Emulador de MOS KIM-1 con Arduino UNO R3
El MOS KIM-1 es para muchos un desconocido pero, sin embargo, es fundamental en la historia de la informática y lo fue, en su momento, para el liderazgo del 6502 en el mercado de los microprocesadores de 8 bits.
En este artículo vamos a emular un MOS KIM-1 sobre un Arduino UNO R3.
Sobre el MOS KIM-1
El MOS KIM-1 (Keyboard Input Monitor) es uno de los primeros ordenador de placa única de la historia. Se lanzó en 1976 como plataforma de aprendizaje del procesador 6502. Fue la inspiración del Commodore PET y del Apple I.
Su arquitectura hardware era muy sencilla, va en un 6502 a 1MHz, 1 KB de RAM integrada en dos chips 6530 RRIOT, los cuales también llevan ROM, E/S y temporización.
Entorno e instalación del emulador
Elementos
Vamos a necesitar el siguiente elemento:
- Arduino UNO R3.
No vamos a disponer ni de la pantalla ni del teclado del MOS-1, aunque se podría adaptar, por lo que nos restringiremos a la conexión vía puerto serie.
Instalación
Vamos a descargar el código fuente del emulador KIMuino desde GitHub en nuestro directorio de trabajo:
$ git clone https://github.com/maksimKorzh/kimuino.git Nos basta con abrirlo en nuestro IDE de Arduino y subirlo.
Emulación
Una vez realizada la subida del emulador, entramos vía terminal al puerto serie de Arduino.
$ minicom -D /dev/ttyUSB0 -b 9600 Vemos el mensaje del sistema con el nombre de la placa, lo que implica que estamos en su monitor ROM.
Monitor ROM
Comenzaremos navegando por la memoria, de modo que escribimos los cuatro dígitos de la dirección correspondiente más espacio y se nos muestra su contenido. Si pulsamos [Intro], nos mostrará el contenido de la siguiente dirección de memoria. Comprobamos que al llegar a $FFFF el contador vuelve a $0000.
BASIC
Podemos cargar el BASIC en ROM, para lo escribiremos la dirección de memoria donde está, 2000, espacio y G. Obtendremos el prompt de BASIC.
Se trata de una versión de TinyBASIC mínima que tan siquiera puede manejar cadenas. Nótese el mensaje de error al intentar pasar una cadena de texto.
No obstante, vamos a introducir un código sencillo.
10 LET X=1 20 PRINT X+0 30 LET X=X+1 40 IF X<6 THEN GOTO 20 50 ENDAl ejecutar el programa con RUN, vemos que cumple su cometido.
Subida de programa desde papel
Podemos subir programas vía cinta de papel, correspondiente al formato PTF. Para ello, solo tomamos el archivo PTF de ejemplo y lo subimos vía el siguiente código Python.
import time, sys port = sys.argv[2] if len(sys.argv) > 2 else '/dev/ttyUSB0' paper = open(sys.argv[1], 'r').read() with open(port, 'w') as f: f.write('L\r') time.sleep(0.2) for c in paper: if c == '\n': f.write('\r') else: f.write(c) time.sleep(0.01) time.sleep(0.5) f.write('0200 G\r')Así, desde línea de comandos ejecutamos este script.
$ python send.py hello.ptf Veremos en el terminal la salida correspondiente.
Y, sí, era un «Hola mundo».
#1976 #MOS #MOS6502







🌱🐾🍋 #fcknzs


