VIA 6522 — Versatile Interface Adapter
Die VIA stellt programmierbare Timer, parallele GPIO-Ports und Interrupt-Logik bereit. Im SBC dient sie als Zeitgeber (Timer 1 löst periodische IRQs aus) und steuert Board-LEDs über Port B.
- Timer 1 im Free-running-Modus erzeugt regelmäßige Interrupts — der Kernel nutzt ihn als ~750-Hz-Tick für Zähler und LED-Blinken.
- Port B Bit 0 ist nach dem Boot mit der Board-LED verbunden.
- IER/IFR — Interrupt-Enable- und -Flag-Register steuern, welche Quellen einen IRQ auslösen.
UART 6551 — serielle Schnittstelle
Die UART realisiert die vollständige Sende- und Empfangslogik mit Statusregistern und Empfangs-Interrupt. Sie ist die Hauptverbindung zum PC: über sie laufen das EhBASIC-Terminal, ROM-Uploads und Diagnoseausgaben. Auf dem Tang Primer 20K wird sie über den CH340-USB-Seriell-Wandler mit 115200 8N1 angesprochen.
Verifizierte Funktionen (GHDL): Status-Lesen, TX-Schreiben, RX-Lesen, RDRF-Clearing, Overrun-Erkennung, programmierter Reset und RX-IRQ-Verhalten.
Tastatur über die serielle Brücke
Eine Besonderheit der FPGA-Umsetzung: Eine PS/2-Tastatur wird am PMOD angeschlossen, und ihre Tastendrücke werden direkt in den seriellen Empfangspfad eingespeist. Für EhBASIC sieht das wie normale serielle Eingabe aus — es muss nicht zwischen UART und Tastatur unterscheiden. So funktioniert lokales Tippen am HDMI-Bildschirm ganz ohne separaten Tastatur-Controller.
Zusammenspiel der Interrupts
Die IRQ-Leitungen von VIA, UART und VIC werden ODER-verknüpft und gemeinsam an die CPU geführt:
cpu_irq_n = NOT (via_irq OR uart_irq OR vic_irq)
Der 6502 verzweigt dann über den Interrupt-Vektor bei $FFFE–$FFFF
in den passenden Handler.