Smartwatch mit BASIC auf physischem 6502


Der 6502-Prozessor gibt es seit über 40 Jahren und wird immer noch in einer Reihe eingebetteter Systeme verwendet. WDC produziert weiterhin Peripherie-Chips der Serien 65C02 und 65Cxx. Der Autor stellte fest, dass sie jetzt in PLCC- und QFP-Paketen verfügbar sind, diese Chipoptionen werden jedoch selten verwendet. Mikroschaltungen in DIP-Gehäusen sind nicht mehr verfügbar, da allein die Nachfrage hausgemachter Hersteller zu gering ist. Der Autor entschied sich für die kleinste Einzelplatine auf 6502, die er kann. Es ist möglich, dass der kleinste bekannte hausgemachte Single-Board-Prozessor auf diesem Prozessor (nicht selbst gemacht und weniger, zum Beispiel Tamagotchi). Das Ergebnis ist ein Gerät, zu dem Sie optional eine Handgelenkhülle mit Riemen entwickeln können. Das Display wurde vom Nokia 5110 übernommen, die Shell wurde mit einer schönen Benutzeroberfläche geschrieben und es stellte sich heraus, dass es sich möglicherweise um die einzige Smartwatch des 6502 handelt.

Die Uhr enthält: einen 65C02-Prozessor mit einer Taktfrequenz von 8 MHz, einen 65C22-Chip, ein Steuer-LCD und Abfragetasten auf der Platine sowie eine externe Tastatur, ein Nokia 5110-Display (84 x 48 Pixel), 32 kB statischen RAM, 16 kB ROM im Adressraum. Die Versorgungsspannung beträgt 3,3 V.

Und das Wichtigste: Als Dockingstation können Sie die Tastaturmatrix von Commodore 64 mit dem Anschluss auf der Platine verbinden, um etwas Ähnliches wie Seiko UC-2000 zu erhalten ( Test auf Habré ):


Schaltung und Topologie der in KiCad kompilierten Leiterplatte. Die Abmessungen der doppelseitigen Platte betragen 3x1,5 Zoll. Alle Komponenten sind SMD, mit Ausnahme des PLCC-Panels sowie der Anschlüsse für Tastatur und LCD.



Die Topologie in der Abbildung ist nicht maßstabsgetreu. Das Aussehen der Platte vor dem Zusammenbau:



Nachher:



Archiv (Schaltung, Karten, Firmware usw.)

Auf der Uhr können Sie mehrere integrierte Anwendungen ausführen. Eines davon, G'Mon (Generic Monitor), ist das Hauptentwicklungs- und Debugging-Tool. Sie können den Inhalt des Speichers in separaten Zellen und Fragmenten anzeigen und bearbeiten, zu Programmen wechseln, die RAM-Abschnitte mit dem angegebenen Byte füllen und Fragmente über den Adressraum verschieben. Die in der Uhr verwendete Version des Monitors ist vereinfacht, sodass EhBasic zusätzlich in das ROM passt. Er ist kaum hineingekommen, es sind nur noch ~ 100 freie Bytes übrig. Der Interpreter wird so überarbeitet, dass er sich mit dem Kern verbinden konnte. Es enthält wiederum alle Initialisierungsroutinen, die Arbeit mit externen Schnittstellen sowie die Beziehung aller verfügbaren Software. Und noch eine Anwendung - das Hauptmenü.

Ein erheblicher Teil des Kernels ist mit Code belegt, der über das durch die Software implementierte SPI-Protokoll bis 6522 mit dem LCD von Nokia 5110 interagiert. Die Unterprogramme WriteBYTE und Command senden Grafikdaten bzw. Befehle an das LCD. Da es keinen Hardware-Textmodus gibt, werden Prozeduren zum Senden von Zeichen an den Bildschirm geschrieben. Der Zeichengenerator ist im ROM gespeichert und wird durch zwei Nachschlagetabellen dargestellt: eine für das High-Byte, die andere für das Low-Byte. Zusammen geben sie die absolute Position des Startzeichenbytes im ROM an. Die Schreibroutine sollte ausgeführt werden, nachdem der ASCII-Code in die Prozessorbatterie geschrieben wurde, und wird auch als X-Koordinate für Nachschlagetabellen verwendet. Die Routine schreibt zuerst den ASCII-Code in den Bildschirmpuffer im Speicher. Dann sucht sie nach den Daten der entsprechenden Kachel und setzt einen Zeiger darauf. Es zeigt 8 aufeinanderfolgende Bytes vom Zeiger an und ruft die CCheck-Subroutine auf. Dadurch wird die Position des Cursors programmgesteuert überprüft. Wenn der Bildschirm voll ist, wird die Bildlaufroutine aufgerufen, die das Bild um eine Textzeile verschiebt. Da der Autor das Lesen vom LCD-Controller nicht implementiert hat, wird der Text entsprechend der Position des Cursors indiziert und in den Puffer im Speicher geschrieben. Die Unterroutine Scrollen zeigt die unteren drei Zeilen vom Puffer bis zu den oberen drei Zeilen auf dem LCD an und füllt dann die untere Zeile mit Leerzeichen. Die verbleibende Routine für die Arbeit mit LCDs ist CReturn. Es durchsucht die Suchtabelle nach der Anfangsposition der nächsten Zeile. Wenn die aktuelle Zeile nicht die unterste ist, wird die Cursorposition um eins erhöht. Wenn das Endergebnis - die Scroll-Prozedur aufruft und erst dann endet.

Die Tastatur wird von der GetKey-Subroutine über 6522 abgefragt. Es liest die Tastaturmatrix zeilenweise und schreibt Bytes in den Speicher. Wenn sich herausstellt, dass Bits Null sind, bestimmt es den ASCII-Code der gedrückten Taste durch die Nachschlagetabelle. Grundsätzlich enthält der Code keine Zyklen, um so schnell wie möglich zu arbeiten. Unterprogramme zum Konvertieren bestimmter Bits in Indizes verwenden keine Nachschlagetabellen. Infolgedessen erwies sich der Code jedoch als ziemlich groß und ineffizient.

Video:


Der Autor arbeitet nicht mehr an dieser Firmware, er wechselte zu anderen Projekten. Er hofft, dass der Code für diejenigen nützlich sein wird, die das LCD von Nokia 5110 von einer Einplatine auf 6502 steuern möchten. Die entsprechenden Routinen können problemlos auf andere Software übertragen werden. Die wichtigsten davon sind Write, Write_NS, Command, WriteBYTE, LCDInit, LCDClear, CCheck, CCheck_NS, CReturn, Scroll und SETCursor. Andere nützliche Routinen sind LCDHome und WriteBMP. Es ist erforderlich, die Variablen LCDCursor, GTmp, GTmp5 und GTmp6 sowie die 84 Byte lange Bildschirmtabelle im Speicher abzulegen. Zusätzlich werden CRTbl-, CTableX- und CTableY-Nachschlagetabellen sowie Char- und Char2-Bitmaps mit allen Kacheln benötigt.

Wenn Sie andere Kachelsätze erstellen möchten, verwenden Sie die Vorlagen aus dem Ordner "Assets". Exportieren Sie in GIMP die Bitmap in eine .data-Datei im RGB-Format (nicht im RGBX-Format). Achten Sie nicht auf die .pal-Datei und legen Sie die .data-Datei aus dem Archiv im BitConvert-Ordner ab. Führen Sie Convert.sh filename.data aus, um die Datei FONT.bin abzurufen, die aus den Kacheln besteht.

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


All Articles