Montre intelligente avec BASIC sur 6502 physique


Le processeur 6502 existe depuis plus de 40 ans et est toujours utilisé dans un certain nombre de systèmes embarqués. WDC continue de produire des puces périphériques des séries 65C02 et 65Cxx. L'auteur a constaté qu'elles sont désormais disponibles dans les packages PLCC et QFP, mais ces options de puce sont rarement utilisées. Les microcircuits dans des boîtiers DIP ne sont plus disponibles, car la demande des fabricants maison est à elle seule trop faible. L'auteur a décidé de fabriquer la plus petite carte simple sur 6502, ce qu'il peut. Il est possible que le plus petit processeur monocarte artisanal connu sur ce processeur (non self-made et moins, par exemple, Tamagotchi). Le résultat est un appareil sur lequel vous pouvez éventuellement développer un étui de poignet avec une sangle. L'écran a été pris à partir du Nokia 5110, la coque a été écrite avec une belle interface, et il s'est avéré, peut-être, la seule montre intelligente sur 6502.

La montre contient: un processeur 65C02 avec une fréquence d'horloge de 8 MHz, une puce 65C22, un écran LCD de contrôle et des boutons d'interrogation sur la carte et un clavier externe, un écran Nokia 5110 (84x48 pixels), 32 Ko de RAM statique, 16 Ko de ROM dans l'espace d'adressage. La tension d'alimentation est de 3,3 V.

Et surtout: en tant que station d'accueil, vous pouvez connecter la matrice du clavier du Commodore 64 au connecteur de la carte, obtenant quelque chose de similaire à Seiko UC-2000 ( avis sur Habré ):


Circuit et topologie de la carte de circuits imprimés compilée dans KiCad. Les dimensions de la planche double face sont de 3x1,5 pouces. Tous les composants sont SMD, à l'exception du panneau PLCC, ainsi que des connecteurs pour le clavier et l'écran LCD.



La topologie de l'illustration n'est pas à l'échelle. L'apparence de la planche avant assemblage:



Après:



Archive (circuit, cartes, firmware, etc.)

Sur la montre, vous pouvez exécuter plusieurs applications intégrées. L'un d'eux, G'Mon (Generic Monitor), est le principal outil de développement et de débogage. Il vous permet d'afficher et de modifier le contenu de la mémoire dans des cellules et des fragments séparés, de basculer vers des programmes, de remplir les sections RAM avec l'octet spécifié et de déplacer des fragments dans l'espace d'adressage. La version du moniteur utilisée dans la montre est simplifiée pour qu'en plus, EhBasic rentre dans la ROM. Il y est à peine entré, il ne reste que ~ 100 octets libres. L'interprète est refait de telle manière qu'il a pu se combiner avec le noyau. À son tour, il contient toutes les routines d'initialisation, fonctionne avec des interfaces externes, ainsi que la relation de tous les logiciels disponibles. Et une autre application - le menu principal.

Une partie importante du cœur est occupée par du code qui interagit avec l'écran LCD du Nokia 5110 via le protocole SPI implémenté par logiciel via 6522. Les sous-programmes WriteBYTE et Command envoient respectivement des données graphiques et des commandes à l'écran LCD. Puisqu'il n'y a pas de mode texte matériel, les procédures d'envoi de caractères à l'écran sont écrites. Le générateur de caractères est stocké dans la ROM et est représenté par deux tables de recherche: une pour l'octet haut, l'autre pour l'octet bas. Ensemble, ils indiquent la position absolue de l'octet de caractère de départ dans la ROM. La routine d'écriture doit être exécutée après l'écriture du code ASCII sur la batterie du processeur et elle est également utilisée comme coordonnée X pour les tables de recherche. La routine écrit d'abord le code ASCII dans le tampon d'écran en mémoire. Elle recherche ensuite les données de la tuile correspondante et y place un pointeur. Affichage de 8 octets consécutifs du pointeur, il appelle le sous-programme CCheck. Cela vérifie par programme la position du curseur et, si l'écran est plein, appelle le sous-programme Scroll, qui décale l'image d'une ligne de texte. Étant donné que l'auteur n'a pas implémenté la lecture à partir du contrôleur LCD, le texte est indexé en fonction de la position du curseur et écrit dans le tampon en mémoire. Le sous-programme Scroll affiche les trois dernières lignes du tampon aux trois premières lignes de l'écran LCD, puis remplit la dernière ligne avec des espaces. La routine restante pour travailler avec les écrans LCD est CReturn. Il recherche dans la table de recherche la position initiale de la ligne suivante et si la ligne actuelle n'est pas en bas, il augmente la position du curseur de un. Si la ligne du bas - appelle la procédure de défilement, puis seulement se termine.

Le clavier est interrogé via 6522 par le sous-programme GetKey. Il lit la matrice du clavier ligne par ligne et écrit des octets dans la mémoire. Si des bits s'avèrent être nuls, il détermine le code ASCII de la touche enfoncée dans la table de recherche. Fondamentalement, le code ne contient pas de cycles afin de fonctionner le plus rapidement possible. Les sous-programmes pour convertir des bits donnés en indices n'utilisent pas de tables de recherche, mais en conséquence, le code s'est avéré assez volumineux et inefficace.

Vidéo:


L'auteur ne travaille plus sur ce firmware, il est passé à d'autres projets. Il espère que le code sera utile pour ceux qui veulent contrôler l'écran LCD du Nokia 5110 d'une seule carte à 6502. Les routines correspondantes peuvent facilement être transférées vers d'autres logiciels. Les plus importants d'entre eux sont Write, Write_NS, Command, WriteBYTE, LCDInit, LCDClear, CCheck, CCheck_NS, CReturn, Scroll et SETCursor. LCDHome et WriteBMP sont d'autres routines utiles. Il est nécessaire de placer les variables LCDCursor, GTmp, GTmp5 et GTmp6 en mémoire, ainsi que la table Screen de 84 octets de long. En plus d'eux, des tables de recherche CRTbl, CTableX et CTableY sont nécessaires, ainsi que des bitmaps Char et Char2 avec toutes les tuiles.

Si vous souhaitez créer d'autres ensembles de tuiles, utilisez les modèles du dossier Assets. Dans GIMP, exportez le bitmap vers un fichier .data au format RGB (pas RGBX). Ne faites pas attention au fichier .pal et placez le fichier .data dans le dossier BitConvert de l'archive. Exécutez Convert.sh filename.data pour obtenir le fichier FONT.bin, qui sera l'ensemble de tuiles.

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


All Articles