Reloj inteligente con BASIC en 6502 físico


El procesador 6502 ha existido durante más de 40 años y todavía se usa en varios sistemas integrados. WDC continúa produciendo chips periféricos de las series 65C02 y 65Cxx. El autor descubrió que ahora están disponibles en paquetes PLCC y QFP, pero estas opciones de chip rara vez se usan. Los microcircuitos en los paquetes DIP ya no están disponibles, ya que la demanda por parte de los fabricantes caseros es demasiado pequeña. El autor decidió hacer la placa única más pequeña en 6502, que puede. Es posible que el procesador de placa única hecho en casa más pequeño conocido en este procesador (no hecho a sí mismo y menos, por ejemplo, Tamagotchi). El resultado es un dispositivo para el que puede desarrollar opcionalmente una funda de muñeca con una correa. La pantalla fue tomada del Nokia 5110, la carcasa fue escrita con una hermosa interfaz, y resultó ser, quizás, el único reloj inteligente en 6502.

El reloj incluye: un procesador 65C02 con una frecuencia de reloj de 8 MHz, un chip 65C22, un LCD de control y botones de sondeo en el tablero y un teclado externo, una pantalla Nokia 5110 (84x48 píxeles), 32 kB de RAM estática, 16 kB de ROM en el espacio de direcciones. La tensión de alimentación es de 3,3 V.

Y lo más importante: como estación de acoplamiento, puede conectar la matriz del teclado del Commodore 64 al conector de la placa, obteniendo algo similar a Seiko UC-2000 ( revisión en Habré ):


Circuito y topología de la placa de circuito impreso compilada en KiCad. Las dimensiones del tablero de doble cara son 3x1.5 pulgadas. Todos los componentes son SMD, excepto el panel PLCC, así como los conectores para el teclado y la pantalla LCD.



La topología en la ilustración no está a escala. La apariencia del tablero antes del ensamblaje:



Después:



Archivo (circuito, placas, firmware, etc.)

En el reloj, puede ejecutar varias aplicaciones integradas. Uno de ellos, G'Mon (Generic Monitor), es la principal herramienta de desarrollo y depuración. Le permite ver y editar el contenido de la memoria en celdas y fragmentos separados, cambiar a programas, completar las secciones de RAM con el byte especificado y mover fragmentos a través del espacio de direcciones. La versión del monitor utilizada en el reloj se simplifica para que, además de eso, EhBasic se ajuste a la ROM. Apenas se metió, solo quedan ~ 100 bytes libres. El intérprete se rehizo de tal manera que pudo combinarse con el núcleo. A su vez, contiene todas las rutinas de inicialización, trabaja con interfaces externas, así como la relación de todo el software disponible. Y otra aplicación: el menú principal.

Una cantidad significativa del núcleo está ocupada por el código que interactúa con la pantalla LCD del Nokia 5110 a través del protocolo SPI implementado por software hasta 6522. Los subprogramas WriteBYTE y Command envían datos gráficos y comandos a la pantalla LCD, respectivamente. Como no hay modo de texto de hardware, se escriben los procedimientos para enviar caracteres a la pantalla. El generador de caracteres se almacena en la ROM y está representado por dos tablas de búsqueda: una para el byte alto y la otra para el byte bajo. Juntos, indican la posición absoluta del byte de carácter inicial en la ROM. La rutina de escritura debe ejecutarse después de que el código ASCII se escribe en la batería del procesador, y también se usa como la coordenada X para las tablas de búsqueda. La rutina primero escribe el código ASCII en el búfer de pantalla en la memoria. Luego busca los datos del mosaico correspondiente y establece un puntero a él. Al mostrar 8 bytes consecutivos desde el puntero, llama a la subrutina CCheck. Esto verifica programáticamente la posición del cursor y, si la pantalla está llena, llama a la subrutina Scroll, que desplaza la imagen en una línea de texto. Como el autor no implementó la lectura desde el controlador LCD, el texto se indexa de acuerdo con la posición del cursor y se escribe en el búfer en la memoria. La subrutina de desplazamiento muestra las tres líneas inferiores desde el búfer a las tres líneas superiores en la pantalla LCD, luego llena la línea inferior con espacios. La rutina restante para trabajar con LCD es CReturn. Busca en la tabla de búsqueda la posición inicial de la siguiente línea, y si la línea actual no es la inferior, aumenta la posición del cursor en uno. Si la línea inferior: llama al procedimiento de desplazamiento, y solo entonces finaliza.

La subrutina GetKey sondea el teclado a través de 6522. Lee la matriz del teclado línea por línea y escribe bytes en la memoria. Si algún bit resulta ser cero, determina el código ASCII de la tecla presionada a través de la tabla de búsqueda. Básicamente, el código no contiene ciclos para que funcione lo más rápido posible. Las subrutinas para convertir bits dados en índices no usan tablas de búsqueda, pero como resultado, el código resultó ser bastante grande e ineficiente.

Video:


El autor ya no trabaja en este firmware, cambió a otros proyectos. Espera que el código sea útil para aquellos que desean controlar la pantalla LCD desde Nokia 5110 desde una sola placa hasta 6502. Las rutinas correspondientes se pueden transferir fácilmente a otro software. Los más importantes son Write, Write_NS, Command, WriteBYTE, LCDInit, LCDClear, CCheck, CCheck_NS, CReturn, Scroll y SETCursor. Otras rutinas útiles son LCDHome y WriteBMP. Es necesario colocar las variables LCDCursor, GTmp, GTmp5 y GTmp6 en la memoria, así como la tabla Pantalla de 84 bytes de longitud. Además de ellos, se necesitan tablas de búsqueda CRTbl, CTableX y CTableY, así como mapas de bits Char y Char2 con todos los mosaicos.

Si desea crear otros conjuntos de mosaicos, use las plantillas de la carpeta Activos. En GIMP, exporte el mapa de bits a un archivo .data en formato RGB (no RGBX). No preste atención al archivo .pal y coloque el archivo .data en la carpeta BitConvert del archivo. Ejecute Convert.sh filename.data para obtener el archivo FONT.bin, que será el conjunto de mosaicos.

Source: https://habr.com/ru/post/448758/


All Articles