Forum: Mikrocontroller und Digitale Elektronik Einfache CPU, einfacher Rechner, nur zum Lernen, Erfahrung?


von Harald K. (kirnbichler)


Lesenswert?

Arduino F. schrieb:
> Wobei es alleine von MOV ca 1/2 Dutzend Varianten gibt,

6502 hat exakt null MOV-Instruktionen.

Falsch abgebogen?

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Möglich

von (prx) A. K. (prx)


Lesenswert?

Manchmal gibt es wohl Zwänge. Bei Zilogs berüchtigten Load-Befehlen, die 
eigentlich Store-Befehle sind, habe ich das Namensrecht im Verdacht.

: Bearbeitet durch User
von (prx) A. K. (prx)


Lesenswert?

Harald K. schrieb:
> 6502 hat exakt null MOV-Instruktionen.

Dafür aber "transfer". Ist das besser? :)

von Harald K. (kirnbichler)


Lesenswert?

(prx) A. K. schrieb:
> Ist das besser?

Kommt auf das Mindset der das verdauenden Person an.

Die sechs "transfer"-Befehle schreiben den Inhalt eines Registers in ein 
anderes (Y nach A oder umgekehrt, X nach A oder umgekehrt, X nach S oder 
umgekehrt).

Hat irgendjemand behauptet, der 6502 hätte einen orthogoalen oder auch 
nur irgendwie logisch aufgebauten Befehlssatz?

Wer einen schöneren Befehlssatz sehen will, soll sich den des 6809 
ansehen.

von Falk B. (falk)


Lesenswert?

Harald K. schrieb:
> Hat irgendjemand behauptet, der 6502 hätte einen orthogoalen oder auch
> nur irgendwie logisch aufgebauten Befehlssatz?

Was ist an dem Befehlssatz unlogisch? Orthogonal ist nett, aber eher 
B-Note. Die Anzahl Millionen (Milliarden?) 6502 CPUs (und deren 
Derivate), die in den letzten 50 Jahren gebaut und benutzt worden sind, 
belegen wohl ganz gut, daß das Ding überaus nützlich war, auch wenn es 
keine akademische Schönheit ist. Aber die ist sowieso zweifelhaft!

Done is better than perfect!

von Josef G. (bome) Benutzerseite


Lesenswert?

Harald K. schrieb:
> Wer einen schöneren Befehlssatz sehen will,
> soll sich den des XXX ansehen.

Ich wüsste da auch einen ...

von Thomas W. (datenreisender)


Lesenswert?

Josef G. schrieb:
> Harald K. schrieb:
>> Wer einen schöneren Befehlssatz sehen will,
>> soll sich den des XXX ansehen.
>
> Ich wüsste da auch einen ...

Natuerlich, VAX Assembly language:

https://www.ece.lsu.edu/ee4720/doc/vax.pdf

Was sonst?

Duck and Cover....

von Roland F. (rhf)


Lesenswert?

Hallo,
Josef G. schrieb:
> Ich wüsste da auch einen...

Stimmt, die PDP-11 wurde noch nicht genannt.

rhf

P.S. Oder dachtest du an was anderes?...

von Klaus (feelfree)


Lesenswert?

Josef G. schrieb:
> Harald K. schrieb:
>> Wer einen schöneren Befehlssatz sehen will,
>> soll sich den des XXX ansehen.
>
> Ich wüsste da auch einen ...

Ich sehe durchaus Parallelen in Günters und Josefs Gedankenwelt - wer 
weiß, vielleicht findet sich ja mit Günter tatsächlich ein erster 
Anwender für bomes 8-Bit-Rechner?

von Harald K. (kirnbichler)


Lesenswert?

Falk B. schrieb:
> Done is better than perfect!

Ich habe das überhaupt nicht (ab)wertend gemeint.

Der Befehlssatz ist halt ... eine deutlich abgespeckte Variante des 
Originals, wie auch der Prozessor eine abgespeckte Variante des 
Originals* ist. Und ja, offensichtlich war das ausreichend, wie der 
deutlich größere Erfolg gegenüber dem Original zeigte - die abgespeckte 
Variante war halt auch deutlich kostengünstiger. Die Mehrarbeit durch 
aufwendigere Programmierung wurde lange Zeit durch die Kostenersparnis 
bei der Hardware aufgewogen.

Aus Sicht des Programmierers aber bietet das Original mehr 
Möglichkeiten, zum Ziel zu kommen ... allein die Tatsache, daß sowohl 
der Stackpointer als auch das Indexregister 16 bit breit waren.

Die Kür in dieser Richtung war eben der 6809, dem allerdings wenig 
Erfolg beschieden war, weil er technisch das Ende der Fahnenstange 
erreicht hatte (mal abgesehen von den viel zu spät erst öffentlich 
dokumentierten Erweiterungen, die Hitachi der CMOS-Version 6309 verpasst 
hatte), und weil nur wenige Monate später mit dem 68000 etwas völlig 
anderes aus dem gleichen Hause zur Verfügung stand.


*) http://www.8bit-era.cz/6800.html

von Christoph M. (mchris)


Lesenswert?

Interessanterweise gab es den 6800 vor dem 6502.
Der 6800 hatte 250$ gekostet und das Preisziel vom 6502 war 25$.
Dazu wurde der 6800 im Detail analysiert und geschaut, welches die 
wirklich wichtigen "Features" waren.
Hier gibt es ein ziemlich aufschlussreiches Video, wie es zum Kampf um 
den 6502 kam:

https://www.youtube.com/watch?v=lP2ZBp9O0mk

Der Registersatz des 6800 war
* Accumulatoren: A,B
* Indexregister IX
* Stackpointer
* Flags
https://en.wikipedia.org/wiki/Motorola_6800

Beim 6502 hat man sich den zweiten Accumulator 'B' gespart und dafür das 
Indexregister 'Y' eingeführt.

Die Index-Register halte ich für enorm wichtig, da man damit schnell 
durch Tabellen gehen kann.

Was mich immer wieder wundert ist, dass der 6502 trotz der sehr viel 
geringeren Registeranzahl mit der Geschwindigkeit des Z80 mithalten 
konnte.
Der Vorteil dürfte aber der relativ schnelle Zugriff auf die 
RAM-Speicherzellen in Page 0 gewesen sein, die man dann als einen 
erweiterten Registersatz betrachten könnte.

von Rbx (rcx)


Lesenswert?

Falk B. schrieb:
> Done is better than perfect!

Perfektion ist sowieso das tote.

Allerdings hatten einige Bethesda-Fans ganz schön ausgeholt, als 
Starfield rauskam.

von Harald K. (kirnbichler)


Lesenswert?

Christoph M. schrieb:
> Dazu wurde der 6800 im Detail analysiert und geschaut, welches die
> wirklich wichtigen "Features" waren.

Eben.

Christoph M. schrieb:
> Die Index-Register halte ich für enorm wichtig, da man damit schnell
> durch Tabellen gehen kann.

Richtig, aber die des 6502 waren nur 8 Bit breit, das des 6800 aber 16 
Bit, so daß Tabellen auch größer als eine "Page" werden konnten, ohne 
daß zusätzliche Klimmzüge nötig waren.

Der 6809 hatte zwei 16-Bit-Indexregister und einen weiteren, ebenfalls 
16 Bit großen Stackpointer, und konnte für manche Operationen die beiden 
8-Bit-Akkumulatoren zu einem 16-Bit-Akkumulator kombinieren.

Ein Problem wurde dann allerdings das relativ langsame Businterface, das 
halt jedes einzelne Byte nacheinander schaufeln musste; hätte man das 
mit einem 16-Bit-Businterface kombiniert, hätte das Ding deutlich 
flotter werden können. Allerdings war damals die restliche Hardware noch 
so teuer, daß man diesen Schritt gerne ausließ - zumal die dann doch 
massiv überarbeitete 68k-Architektur eh' konzeptionell überlegen war 
(mit jeder Menge 32-Bit-Registern ...).

von Thomas W. (datenreisender)


Lesenswert?

Christoph M. schrieb:
> Interessanterweise gab es den 6800 vor dem 6502.
> Der 6800 hatte 250$ gekostet und das Preisziel vom 6502 war 25$.

Das war damals die Vorgabe: Moeglichst billig fuer den Massenmarkt.

> Beim 6502 hat man sich den zweiten Accumulator 'B' gespart und dafür das
> Indexregister 'Y' eingeführt.

Vor allen Dingen sind die Indizes fuer hoehe Programmiersprachen sehr 
hilfreich, so ein Art Frameindex (so dass Du lokal Variablen nicht auf 
dem Stack packen musst sondern auf Deinen Frame. Bei Return kannst Du 
dann alle Lokales einfach entsorgen)

> Die Index-Register halte ich für enorm wichtig, da man damit schnell
> durch Tabellen gehen kann.
>
> Was mich immer wieder wundert ist, dass der 6502 trotz der sehr viel
> geringeren Registeranzahl mit der Geschwindigkeit des Z80 mithalten
> konnte.

Noe. Die 6502 hatte kein richtiges Microprogramming sondern wirklich ein 
direktes Steuerwerk. Das war schnell, auch der Speicherzugriff ueber 
Phi1/phi2 war sehr schnell und direkt. Die Z80 war viel komplexer 
aufgebaut und brauchte mehrere T-Zyklen um den OpCode zu dekodieren 
(auch wg. des Mikroprogramming).

> Der Vorteil dürfte aber der relativ schnelle Zugriff auf die
> RAM-Speicherzellen in Page 0 gewesen sein, die man dann als einen
> erweiterten Registersatz betrachten könnte.

Wenn Du den Nachfolger WDC65S02 anguckst: Dort wurde das Konzept der 
Zeropage auf die Direct-Page weiterentwickelt: Durch 
Direkt-Page-register (beim Reset 0x00) konntest Du Deine Zero-Page 
beliebig schieben.

Wenn Du ein bisschen Geschichte lesen willst: in 
Beitrag "a Microprocessor for the Revolution -- 6809" habe ich einen Artikel 
von der Byte 1979 gezeigt wie der 6809 entwickelt wurde (so per Hand).

Gruesse

von Soul E. (soul_eye)


Lesenswert?

Christoph M. schrieb:
> Was mich immer wieder wundert ist, dass der 6502 trotz der sehr viel
> geringeren Registeranzahl mit der Geschwindigkeit des Z80 mithalten
> konnte.

Lass Dich nicht von dem geringeren Quarztakt irritieren. Der 6502 
braucht einen Quarztakt pro CPU-Takt. Beim Z80 sind es vier. D.h. Du 
musst einen Z80 mit 4 MHz takten, damit er innen drin genauso schnell 
läuft wie ein 6502 mit 1 MHz. Der Z80 hat leistunsfähigere und komplexe 
Befehle, aber die brauchen relativ lange. Beim 6502 muss man diese durch 
Unterprogramme nachbilden, was im Ergebis ähnlich schnell ist.

Für den Assemblerprogrammierer ist der Z80 schöner, weil man eleganteren 
und kürzeren Code schreiben kann. Für den Anfänger ist der 6502 
angenehmer, weil der einfacher zu überblicken ist.


> Der Vorteil dürfte aber der relativ schnelle Zugriff auf die
> RAM-Speicherzellen in Page 0 gewesen sein, die man dann als einen
> erweiterten Registersatz betrachten könnte.

Richtig. Die Zero-Page ist quasi eine Registerbank.

von Christoph M. (mchris)


Lesenswert?

Soul E. (soul_eye)
25.05.2025 11:01
>Lass Dich nicht von dem geringeren Quarztakt irritieren. Der 6502
>braucht einen Quarztakt pro CPU-Takt.

Das mit dem Takt ist mir bekannt und auch die Ausführung des Z80 als 
Bitslice-Prozessor mit 4 Bit Alu. Ich kenne den Z80 vom ZX81 mit knapp 
4MHz Takt im Gegensatz zu den üblichen 1MHz beim 6502.
Ich hätte vermutet, dass der Faktor 4 im CPU-CLK die Nachteile des 
Bitslice-Aufbaus ausgleicht und dass dann der doppelte Registersatz beim 
Z80 und die 16Bit Index-Register einiges an Performance Gewinn bringen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.