CPU6502

Aus test.nkc-wiki.de
Zur Navigation springen Zur Suche springen


Beschreibung

6502 CPU Platine für das NDR Klein Computersystem

Entwickelt von Rene Vetter und Jens Mewes basierend auf den Erläuterungen zu einer 6502-Karte am Z80-BUS:

https://ancientcomputing.blogspot.com/2017/05/a-6502-cpu-for-rc2014-part-1.html


Aufbau

Bauteileliste

Stück ID Bezeichnung Bemerkung
1 U1 6502 R6502 erfolgreich getestet
1 U2 74LS688
2 U3, U10 74LS74
1 U4 74LS04
1 U5 74LS00
3 U6, U8, U9 74LS245
1 U11 TL7705
1 U12 SPG8640AN
2 Widerstand R1, R2 22k
1 Widerstandsnetz RN1 4x3k3
1 Widerstandsnetz RN2 8x3k3
12 Kerko C1, C2, C3, C4, C5, C6, C7, C8, C9, C10, C11, C12 100nF
1 Kondensator C13 47µF/10V
1 Kondensator C14 100µF/10V
1 SW1 Kurzhubtaster Reichelt: TASTER 3301B
1 Oszillator X1 1 oder 2 oder 4MHz
3 JP1, JP4, JP5 Stiftleiste 1x2, gerade
1 JP3 Stiftleiste 3x2, gerade
1 J11 Stiftleiste 1x2, gewinkelt
1 J12 Stiftleiste 8x2, gerade
1 J2 Stiftleiste 1x54, gewinkelt

Hinweise

Eine besondere Schwierigkeit bei der Verwendung des 6502 im NKC ist, daß der 6502 ein deutlich anderes BUS-Verhalten voraussetzt als der Z80. Der Z80 BUS ist asynchron. Der 6502 erwartet die Signale jedoch mit dem Systemtakt (bzw. einer Ableitung davon) synchronisiert. Dies wurde bei der NKC-CPU6502 durch das Verknüpfen mit diversen Logikgattern hinreichend nachgebildet. Trotzdem gibt es immer noch Schwierigkeiten, die durch das Timing hervorgerufen werden.

CPU Typ
Es funktioniert nicht jeder 6502 Chip auf der NKC-CPU6502!
Wenn es bei der Inbetriebnahme Schwierigkeiten gibt, kann es helfen, es mit einem anderen 6502 von einem anderen Hersteller zu probieren.
Meine Erfahrungen:
UM6502 - Resetprobleme, Ausgabe einiger falscher Zeichen bei >1MHz
WDC65c02 - Resetprobleme, völlig falsche Zeichenausgabe
R6502 - Stabil bei 500khz .. 2MHz
Timer
Der Timer mit dem SPG8640AN ist zwar im Prinzip optional und könnte (erstmal) weggelassen werden. Es wird jedoch dringend empfohlen, ihn zu bestücken.
Durch den Timerinterrupt existiert eine stabile und CPU-taktunabhängige Zeitbasis, z.B. für Timeouts, Spieleroutinen, Cursorblinken, ... Es ist zu erwarten und zu hoffen, das künftige Software diesen Timer nutzt und damit voraussetzt.
Wenn man jedoch nur selbstgeschriebene Software auf der CPU6502 laufen lassen will, muß man die Bauteile innerhalb der Markierung auf der Platine nicht bestücken.
Da es sich beim Timerinterrupt um einen NMI handelt, der nicht abgeschaltet werden kann, darf der Jumper zum Aktivieren des Timers nur gesetzt sein, wenn im die Software im System diesen Interrupt schon behandeln kann. Zum Beispiel sollte das Grundprogramm zumindest eine Routine enthalten, die aus dem NMI sofort zurückkehrt. Anderenfalls führt der Interrupt zu unvorhersehbarem Verhalten, und der Jumper sollte nicht gesetzt werden.
Hintergrund: Der (abschaltbare) IRQ des 6502 ist im Gegensatz zum NMI pegelgesteuert und nicht flankengesteuert. Die Erzeugung des Interruptsignals wäre damit deutlich aufwendiger gewesen.

Jumper

  • JP1: Auswahl MOS6502 oder WDC65c02
MOS6502: geschlossen (default)
WDC65c02: offen
  • JP3: Auswahl der CPU Taktfrequenz
f/1: Oszillatorfrequenz
f/2: Oszillatorfrequenz / 2
f/4: Oszillatorfrequenz / 4
  • JP4: Zeitgeberfrequenz
50Hz: offen
100Hz: geschlossen
  • JP5: Zeitgeberinterrupt (NMI)
Timer NMI aktiv: geschlossen
Timer NMI ausgeschaltet: offen
  • J12: Auswahl des Adressraums für I/O-Ports
Hier kann eine 256 Byte Seite innerhalb des 64k Adressraums festgelegt werden, in der anstelle des Speichers die I/O Ports angesprochen werden.
Der Zugriff auf I/O-Ports erfolgt beim 6502 im Gegensatz zum Z80 nicht mit speziellen IN/OUT Befehlen, sondern mit normalen Speicherzugriffen.

Software

Derzeit wird noch an einem Grundprogramm für die CPU6502 gearbeitet. Die Betaversion enthält schon einen Monitoe, Assembler und Unterstützung für die CAS-neo.

Hier ein Beispiel, wie ein eigenes Assemblerprogramm für die CPU6502 aufgebaut sein kann. Benötigt wird z.B. der TASM Crossassembler für DOS, den man hier findet: http://6502.org/tools/asm/tasm301.zip

Datei:Beispiel6502.zip

Nach dem Assemblieren erhält man ein 8kB großes Objektfile. Das wird auf ein E(E)PROM gebrannt und in Steckplatz 8 einer ROA64 gesetzt. Das Beispiel enthält simple Routinen zum Initialisieren des 6502-Systems, Benutzung der GDP64 zur Zeichenausgabe und der KEY zum Einlesen von der Tastatur.

Nach den Initialisierungen wird "ABC" auf dem Bildschirm ausgegeben. Danach wird in einer Endlosschleife von der Tastatur gelesen und jedes Zeichen auf den Bildschirm geschrieben. Es wird kein Zeilenumbruch, Scrolling usw. vorgenommen. Aber der Code ist eine erste Grundlage, daraus eigene Programme zu entwickeln.


Projekte mit CPU6502 CPU

Links

coming soon

History

V0.1: 3.1.2019 RV Erster Prototyp
V1.0: 2.1.2020 RV Erweiterte und fehlerbereinigte Version