Einfache CPU, einfacher Rechner, nur zum Lernen, Erfahrung?

#7881355
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.

#7881383
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!

#7881508
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

#7881519
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

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.

#7881530
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 ...).

Gast #7881532
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

#7881536
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.

#7881559
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.

OP #7881860
Lesenswert?

Arduino F. schrieb:

Relativ nutzlos. Selbst der beste Disassembler kann nicht die Intentionen des Codes Erstellers ermitteln.

Übrigens: Um mal Werbung für Arduino zu machen...

Hallo liebe Leute, hallo Arduino F.,

Das klingt ja interessant, da würde ich mit kleinen Schaltungen anfangen, ohne den JC zu verlassen.

Übrigens habe ich die Adressen-Reihe für das einfache Ton-Programm, neu eingegeben und auch die Sprungadressen wieder geändert. (Die R.-Adressen brauche ich ja nicht zu ändern), es klappte wieder nicht. Also tausche ich die RAMs, ich brauche sowieso noch weitere für die Peripherie.

Es gelingt mir -scheinbar- nicht, aus der Schleife zu springen, ohne den Ton zu verändern. Vielleicht fällt dann sogar die "01" im Y-Register weg.

  • Weil ich das noch nicht verstehe, möchte ich doch, was Klaus sagt machen. Erst ohne, dann mit Timer. Ich meine: Auf jeden Fall braucht ein Computer eine Uhr bzw. auch einen Kalender.

Weil ich da nicht Bescheid weiß, schreibe ich ein Lied-Programm ab. - Allerdings erst ab 0x0300. Für den Anfang, trage ich nur zwei gleiche Töne ein. - Also: "Tuut, Pause, Tuut.", Später anderes. Schlau daraus geworden, bin ich auch noch nicht. Ich gespannt was werden wird.

Liebe Grüße Günter K. (ENK)

OP #7882210
Lesenswert?

Klaus schrieb:

Hast du das Tonleiter Programm auch nur einmal angeschaut und versucht zu verstehen wie es funktioniert? Wenn ja, hast du irgendwas davon verstanden? Wenn nein, warum nicht?

Hallo Klaus,

Ich war inzwichen tätig, (an der Abschrift) habe mich damit aber total verhäddert. Jetzt lege ich mich noch einemal hin. Bitte schicke mir nochmal die Tonleiter. LG Günter K. (ENK)

#7882265
Lesenswert?

Günter K. schrieb:

Ich war inzwichen tätig, (an der Abschrift)

Was versprichst Du dir vom abschreiben? Da lernt man nichts dabei.

Du sollst verstehen, was jede einzelne Assembler-Anweisung macht. Teilweise steht es ja schon dahinter, teilweise ist es selbsterklärend, und den Rest musst Du dir erarbeiten (nachschlagen oder nachfragen). Nur so kannn man eine Sprache lernen.

Ich mach mal den Anfang für dich, geküzrt so dass nur 2 Noten gepsielt werden, mit zusätzlichen deutschen Kommentaren

1
    ;*****************************************************************************
2
    ; Spiele 2 Noten abwechselnd
3
;*****************************************************************************
4
.org $300
5
    lda #$1      ; lade den Wert 1 in den Akkumulator
6
    sta PBDD     ; setze Register PBDD (Datenrichtungsregister für Port B) auf 1 -> Pin PB0 ist Ausgang
7

8
mainloop:
9
    ; Spiele die Note C
10
    lda #200     ; lade den Akkumulator mit dem Wert 200
11
    sta 0        ; speichere den Inhalt des Akkumulators an Adresse 0
12
    jsr playnote ; rufe die Subroutine zum Spielen einer Note auf
13

14
    ; Spiele die Note D
15
    lda #158     ; lade den Akkumulator mit dem Wert 158
16
    sta 0        ; speichere den Inhalt des Akkumulators an Adresse 0
17
    jsr playnote ; rufe die Subroutine zum Spielen einer Note auf
18

19
    jmp mainloop ; fange wieder von vorne an mit der ersten Note
20

21
playnote: ; Das ist die EinsprungAdresse zum Spielen einer Note. 
22
          ; An Adresse 0 muss die benötigte Verzögerung stehen
23

24
    ldy #50 ; Das ist die Länge der Note. Höhere Noten werden kürzer gespielt; aber das soll hier nicht stören
25

26
loop:
27
    ; default delay
28
    ldx #180        ; Feste Wartezeit von 5us×179+5us=900us, damit wir mit einem Register (max. Wert 255) für die zusätzliche Verzögerung auskommen
29
    jsr shortdelay  ; Hier wird gewartet, und zwar ca. 5 Microsekunden multipliziert mit dem Inhalt von Register X, also hier 180*5 = 900µs.
30

31
    ldx 0            ; Lade den Inhalt von Adresse 0 in Register X
32
    jsr shortdelay   ; Hier wird gewartet, je nach Inhalt 
33

34
    lda PBD      ; Lese den Inhalt des Ausgangsregisters
35
    eor #$01     ; invertiere das Bit0
36
    sta PBD      ; und schreibe den Wert zurück -> Taktflanke für Rechtecksignal für unseren Lautsprecher
37

38
    dey
39
    bne loop
40
    rts
41

42
    ; Total time (in microseconds)=5N+5
43
shortdelay:
44
    dex             ; 2 cyc
45
    bne shortdelay  ; 3 cyc jmp , 2 no mp
46
    rts             ; 6 cyc
47

48
; MOS6532 PIA addreses
49

50
PAD:     .org $1A80
51
PADD:    .org $1A81
52
PBD:     .org $1A82
53
PBDD:    .org $1A83

Jetzt sind nur noch die letzten 6 Assembleranweisungen nicht oder nur kurz auf englisch kommentiert. Versuch einfach zu verstehen (und aufzuschreiben) , was die machen.

OP #7882334
Lesenswert?

Hallo Klaus und Alle,

zunächst, muss ich mich für eine Satzaussage entschuldigen und richtigstellen, denn wo ich schrieb:

Klaus schrieb:

Günter K. schrieb:

und siehe da, - da hat dieser Assembler hat auch einen Assembler. Richtig sollte es heißen: " ... und siehe da, - da hat dieser Assembler hat auch einen Compiler".

Da hatte ich mir tatsächlich schon so, in den 'Assembler' verbissen, dass ich "Assembler" statt "Compiler" schrieb.

Ja, was hätte ich dann gerne: "Einfache CPU, einfacher Rechner, nur zum Lernen, Erfahrung". Und ich freue mich, gute Leute zu sehen, die Erfahrung damit haben.

  1. Selbst von dem Programm, was ich abgetippt habe, aber noch nicht eingetippt in den JC (Junior-Computer), -, noch von den,
  2. von den -wirklich gut gemeinten- Routinen, - verstehe ich zu wenig!

Ich hätte gerne, ein ganzes Programm, als einen Modularen-Aufbau, bzw. ganze/s Programm/e in einem Modularem-Aufbau.

Was ich unter:

  1. u.a. sehen konnte, war ein Gewirr von Schleifen. - Und unter
  2. bitte ein ganzes Programm, - bei dem ich verstehen möchte, wo der noch richtig laufende Ton, nicht unterbrochen wird, - weil der Ton ja nicht unterbrochen werden darf, es sei denn, innerhalb eines Halbwellen-Zyklus des höchsten Tones, sich jeweils ein ganzer Befehls-Satz unterbringen lässt. - ?

Bitte ärgere Dich nicht, bitte ärgert Euch nicht. -. Sonst muss ich ganz neu lernen, wie ein Befehl den anderen Befehl beeinflusst. Das ging mir auch noch bei dem Z80 durch den Kopf, weil dort in dem Buch verschieden OP-Codes, für einen Befehl standen; denn dann hätte ich -vielleicht- herausfinden können, wie, welcher Befehl werden würde; aber, das würde viel zu viel werden.

Nein: Ein Befehl, der unbeschwert zu greifen ist, macht eine ganz bestimmte Sache, ohne was Anderes, wenn es nicht sein muss, zu beeinflussen.

Fertig funktionierende Timer, würden dabei helfen. Es könnten auch verschiedene Timer sein. Ein Timer für die Uhrzeit, und andere Timer für Startsequenzen. Liebe Grüße Günter K. (ENK)

#7882347
Lesenswert?

Günter K. schrieb:

Nein: Ein Befehl, der unbeschwert zu greifen ist, macht eine ganz bestimmte Sache, ohne was Anderes, wenn es nicht sein muss, zu beeinflussen

Abgesehen davon, dass du wirklich NICHTS verstanden hast, habe ich nach solchen völlig unverständlichen Aussagen nun auch das letzte Quäntchen Hoffnung verloren, dass Du je mehr lernst, als das, was der Assembler-Befehl "NOP" macht: Genau nichts.

#7882353
Lesenswert?

Günter K. schrieb:

Fertig funktionierende Timer, würden dabei helfen. Es könnten auch verschiedene Timer sein. Ein Timer für die Uhrzeit, und andere Timer für Startsequenzen

Wir sollen also dem Grundschüler, der nicht bis 4 zählen kann, nicht nur beibringen, was 2+2 ist, sondern ihm auch erklären, wie man die Wurzel aus 46534 berechnet? Welche der beiden Aufgaben führt denn eher zum Erfolg?

#7882363
Lesenswert?

Klaus schrieb:

Günter K. schrieb:

ich brauche den OP-Code, -

Da stehen ca. 20 Stück davon im Programm. Danach ein Semikolon und eine genaue Erklärung, was der Opcode macht.

Nee.

Was Du "opcode" nennst, heißt /Mnemonic/, und ist eine Klartextrepräsentation von Assemblerinstruktionen. So etwas wie LDA, STA etc.

Ein Opcode ist der zum Mnemonic und der konkreten Adressierungsart gehörende /Binärcode/ der Instruktion.

Aus lda #$1

wird 0xA9 0x01

Aus lda #200

wird 0xA9 0xC8

Günter ist es wohl zu mühsam, Dein Programm von Hand zu assemblieren, und durch einen Assembler will oder kann er es aus irgendwelchen Gründen nicht schicken ...

OP #7882505
Lesenswert?

Harald K. schrieb:

Denk dran:

Das hier https://www.mikrocontroller.net/attachment/662153/junior3_04.jpg ist der Computer, mit dem Günter unterwegs ist.

  • JA! SEHR GUT!

Ja, ich würde gerne selbst, wie der Prozessor sein. :-) ;-) -!

Die Mnemonic brauche ich nur um zu wissen, was der Maschinenbefehl tut. Allerdings sind die angegebenen Zeiten, sehr interessant. Denn dann weiß ich, ob ich während der Halbwelle Zeit habe, ein Byte zu Inkrementieren und aus der Halbwelle auszuscheren, um dann als ... s. 2.. Allerdings sollte das ganze Programm mit einer Pausengruppe beginnen, in dem

  1. auch, die Pausen sind, die in der Notenschrift nicht vorkommen, aber vorhanden sind. Damit das Ganze in den Takt passt, muss diese Note vor der sog. Pause, die ja wirklich eine Pause ist, um dessen Länge kürzer gemacht werden. - Ich weiß, solche Musik klingt deshalb nicht gut, weil man dann sofort die Automatik heraushört. Es handelt sich hier um Zeitintervalle.
  2. bei dem Ausscheren werden Memorys hochgezählt, danach
  3. Die Tonhöhe aus der Zerro-Page in das x- und y- geladen werden. (Zur aus der ZP, damit es schnell gehen kann.)
  4. Was anfänglich nur 2 Töne sind, wird nachher ein ganzes Lied.
  5. Das alles muss sich abspielen, während u.a. der höchste und kürzeste Ton
    gespielt wird oder eine Pause läuft.
  6. Das Abspielen aber, soll ein eigenes Programm sein. Aus diesem Grunde, wird es mitunter sehr lang. Und das, in einem maschinenartigen Programm.

Zum Trost, weil ich selber nichts durch Eingabe erreicht habe, schreibe ich ein kleines Programm für die 7-Segment-CODE-Anzeige. Jetzt wünsche ich Euch erst mal eine gute Nacht mit lieben Grüßen Günter K. (ENK)

#7882530
Lesenswert?

Günter K. schrieb:

Zum Trost, weil ich selber nichts durch Eingabe erreicht habe, schreibe ich ein kleines Programm für die 7-Segment-CODE-Anzeige.

Ja ist klar. Bevor auch nur die Gefahr besteht, dass Du bei einer noch so einfachen Aufgabe irgendeinen Strohhalm entdeckst, der dich weiterbringen könnte, wechselt du lieber das Thema.

Wolfgang R. schrieb:

Klaus schrieb:

Gibt's da keine LED

Alternativ nur die LEDs in den Siebensegmentanzeigen - das ist aber für einen Anfänger nicht ganz trivial.

Also für Günter ungefähr so einfach wie die Besteigung des Mount Everest für einen Querschnittsgelähmten, ohne Sauerstoff versteht sich.

OP #7882545
Lesenswert?

Hallo liebe Leute,

Harald K. schrieb:

Was Du "opcode" nennst, heißt Mnemonic, und ist eine Klartextrepräsentation von Assemblerinstruktionen. So etwas wie LDA, STA etc.

Was ich OP-CODE nenne, ist der OPERATIONS-CODE. - Und RICHTIG Harald K.: Du schriebst:

Harald K. schrieb:

Denk dran:

Das hier https://www.mikrocontroller.net/attachment/662153/junior3_04.jpg ist der Computer, mit dem Günter unterwegs ist.

Gut gesagt! Ich bin wirklich nicht so schlau. RICHTIG, - DANKESCHÖN! Das ist ehrlich gemeint. Liebe Grüße Günter K. (ENK)

#7882612
Lesenswert?

Um mit dem Programmieren zu beginnen, braucht man erst mal eine vernünftige Arbeitsumgebung. Und da jeder einen PC hat, nimmt man eben diesen. Darauf installiert man eine Umgebung mit Editor, um Quelltexte einzugeben und abzuspeichern. Dann einen Assembler für das gewünschte Target. Auch ein Simulator ist zu empfehlen, wo man erst mal alles im Schrittbetrieb ablaufen und nachverfolgen kann. Hier mal wahllos was rausgesucht: https://edsim51.com/

Irgendein uraltes CPU-Spielzeug, was nicht mal Programme permanent abspeichern kann, ist dagegen absolut untauglich zum Lernen. Damit wirst Du nie im Leben Fortschritte erzielen können. Vergiß den Junior-Computer ganz schnell, das ist ne Sackgasse (zumindest für Dich).

Es gibt heutzutage Eval-Boards, wo man über USB debuggen kann. D.h. man hat auf dem PC Fenster, in denn man Code, Daten, Stack, Timer, Register usw. schön übersichtlich angezeigt bekommt.

#7882629
Lesenswert?

Peter D. schrieb:

Irgendein uraltes CPU-Spielzeug, was nicht mal Programme permanent abspeichern kann, ist dagegen absolut untauglich zum Lernen. Damit wirst Du nie im Leben Fortschritte erzielen können.

Was glaubt Ihr Youtube-Kiddies eigentlich, wie wir damals was gelernt haben? Zu der Zeit, als der Junior, der Apple II oder der C64 noch Stand der Technik waren. Aus diesem Wissen ist genau die Klickibunt-Welt entstanden, die Du als selbstverständlich voraussetzt.

Klar geht das heute auch einfacher, und statt eines steinalten RISC-Prozessors von 1976 kann man einen Arduino nehmen. Aber der TO möchte das Ganze genau so nacherleben, wie er es eigentlich 1978 hätte tun wollen.

#7882632
Lesenswert?

Soul E. schrieb:

Peter D. schrieb:

Irgendein uraltes CPU-Spielzeug, was nicht mal Programme permanent abspeichern kann, ist dagegen absolut untauglich zum Lernen. Damit wirst Du nie im Leben Fortschritte erzielen können.

Was glaubt Ihr Youtube-Kiddies

So nennst du Peda?

Klar geht das heute auch einfacher, und statt eines steinalten RISC-Prozessors von 1976 kann man einen Arduino nehmen. Aber der TO möchte das Ganze genau so nacherleben, wie er es eigentlich 1978 hätte tun wollen.

Es wurden EMULATOREN empfohlen. Keine Arduino.

Und er KANN es eben nicht so erleben wie 1978 weil ihm dafür jede geistige Kapazität fehlt. Sad but true.

#7882651
Lesenswert?

Peter D. schrieb:

zeigte bisher keine merkbaren Fortschritte.

Würde ich so nicht sagen. Problematisch ist halt, dass einige Sachen parallel gelernt werden müssen, Codierungsarten, Logikfeinheiten oder Speichermanagement z.B. - das heißt man muss halt ein wenig Geduld haben, Befehle verstehen, Programme ausprobieren, Programme verändern, Algos ansehen und ausprobieren usw. und darauf hoffen, dass es bald "klick" macht. Den Logikteil kann man auch ganz gut mit Papier und Bleistift machen. Ist auf jeden Fall für mich angenehmer, und würde ich auch empfehlen.

Das war übrigens bei C früher auch so. Man geht erstmal ein paar Programme durch (also abtippen und testen) ohne viel zu verstehen. Das Verständnis kommt nach und nach, aber es gibt auch immer wieder neue Herausforderungen.

#7882654
Lesenswert?

Soul E. schrieb:

Aus diesem Wissen ist genau die Klickibunt-Welt entstanden, die Du als selbstverständlich voraussetzt.

Jaja mach mal halblang.

Also ein 8080 System ist schweineeinfach. Das Problem damals waren wohl eher die Preise für die ganze Peripherie, Speicher usw. Komplex oder gar schwierig ist da gar nichts.

Habe erst letztens ein 8080 System komplett von Null auf gebaut. Mit der damaligen Peripherie aber modernem (1994) Speicher. 64 KB RAM und 64KB ROM, SIO, einfache digitale IO. Simpel. HW ist Simpel, 8080 Assembler ist simpel.

Wo ein wenig Gehirnschmalz stecke, war das Frontpanel des Altair, mit dem man direkt den Speicher laden und anzeigen konnte.

Natürlich natürlich, manche SW, vor allem Spiele, waren komplex. Das ist sie aber heute auch. Weil man immer an die Grenzen der HW ran muss. Aus wirtschaftlichen Gründen.

Also immer auf dem Teppich bleiben und vielleicht mal in eine moderne Vorlesung "Rechnerarchitektur" reinschnuppern. Da gibts dann wirklich komplexe Dinge.

#7882656
Lesenswert?

Moin,

Was den bemuehten Helfern anscheinend ueberhaupt nicht auffaellt: Es scheint ENK nicht darum zu gehen, irgendetwas "schnell" oder "richtig" lernen zu wollen oder gar muessen. Sondern er macht halt seinen Stiefel, wie er's fuer richtig haelt. Solange dann nicht mit dieser Software irgendwelche Atomkraftwerke, Herzschrittmacher oder autonome Autos laufen sollen, ist das doch voellig ok. Offensichtlich hat er an seinem Herumgewurstele, so wie er es macht, ja Spass. Sonst wuerde er es ja nicht so machen. Da muesst ihr einfach mal damit klarkommen.

scnr, WK

#7882663
Lesenswert?

Cyblord -. schrieb:

Soul E. schrieb:

Aus diesem Wissen ist genau die Klickibunt-Welt entstanden, die Du als selbstverständlich voraussetzt.

Jaja mach mal halblang. (...)

Wo genau siehst Du den Widerspruch zu meiner Aussage? Aus dem 8080 ist der 8086 entstanden, der zu den heutigen Core i7 und Ryzen führte.

Aus den Monitorprogrammen von damals sind CP/M und MS-DOS entstanden, aus denen die modernen Betriebssystemen Linux und Windows entstanden sind.

Simpel. HW ist Simpel, 8080 Assembler ist simpel.

Natürlich war das simpel. Heute ist es komplexer. Das Komplexe baut auf das Simple auf. Das Simple bildet die Grundlagen des Komplexen.

Von der heutigen IT ist nichts vom Himmel gefallen. Das hat sich alles evolutionär aus der Steinzeittechnik der '70er Jahre entwickelt.

Da, wo Günter mal reinschnuppern möchte.

#7882665
Lesenswert?

Soul E. schrieb:

Wo genau siehst Du den Widerspruch zu meiner Aussage? Aus dem 8080 ist der 8086 entstanden, der zu den heutigen Core i7 und Ryzen führte.

Du suggerierst (mit deinem youtube Kiddies) dass dies alles damals so schwer und komplex war. Und das war es nicht.

Von der heutigen IT ist nichts vom Himmel gefallen. Das hat sich alles evolutionär aus der Steinzeittechnik der '70er Jahre entwickelt.

Triviale Aussage, Captain Obvious.

Da, wo Günter hmal reinschnuppern möchte.

Kann er ja, nur sollte er moderne Tools dafür verwenden. In alte Technik mit alter Technik reingucken kann nur wer minimalste Grundlagen der digitalen Datenverarbeitung verstanden hat. Somit er nicht.

#7882681
Lesenswert?

Cyblord -. schrieb:

Du suggerierst (mit deinem youtube Kiddies) dass dies alles damals so schwer und komplex war. Und das war es nicht.

Nein, ich suggeriere nicht dass alles schwer war, sondern ich widerspreche der Aussage

Peter D. schrieb:

Irgendein uraltes CPU-Spielzeug, was nicht mal Programme permanent abspeichern kann, ist dagegen absolut untauglich zum Lernen. Damit wirst Du nie im Leben Fortschritte erzielen können.

Das Zeug war tauglich zum Lernen, wir haben damit gelernt, und die Ergebnisse, die Fortschritte der IT-Branche in den letzten 40 Jahren, könnt Ihr heute bewundern.

Gerade weil das alte Zeug relativ primitiv und übersichtlich ist, eignet es sich zum Lernen.

#7882690
Lesenswert?

Soul E. schrieb:

Nein, ich suggeriere nicht dass alles schwer war, sondern ich widerspreche der Aussage

Leicht und schwer oder komplex und simpel relativieren sich immer am eigenen Horizont. Wer in Hex "denken" und rechnen kann, wer über relative Adressierung nicht mehr nachdenken muss und wer die meisten 6502 Mnemonics einfach wegschreiben kann, ist das alles simpel. Wir in der Computer AG 1980 herum, wußten von unserm Commodeore Pet sehr viele ROM-Einsprungsadressen aus dem Effeff. Für Umstehende erschien das - mal vorsichtig - irgendetwas zwischen genial und nerdig. Aber wer komplett neu einsteigt, für denn ist das alles kompliziert und dem sollte man nicht sagen, es ist simpel.

Nur habe ich Probleme mit Günters Post. Allein die Zahl der Beiträge erfüllt alle Troll-Kriterien. Er erweist sich als beratungsresistent. Auf viele Hilfsangebote reagiert er gar nicht. Immerhin bleibt er immer nett.

#7882870
Lesenswert?

Naja,

viele von uns fingen auch mit Hand assemblierten Object Code an. Mein "Erster" war eine MC6802 Motorola Bord. Ganze 256 Bytes für Programm und Daten. Später kam ein MC68HC11EVB dazu. Das war schon viel mehr Komfort.

Allerdings, heute würde ich mir das auch nicht mehr antun. Mnemonik Assemblieren ist das Unterste was ich heutzutage akzeptieren würde. Object Codes eintippen macht nicht wirklich Spaß. Da ist Mnemonik absoluter Fortschritt und man wußte das schon in den 50ern zu schätzen. Abgesehen davon nimmt einem ein guter Assembler viel Arbeit ab mit Offset Berechnungen und Makros.

Ich würde vielleicht zu einem MSP430 auf einer Eval Bord raten. Da ist zumindest die Infrastruktur zwischen PC und uC ausgefeilt und die Programme sind nicht flüchtig. Mehr Spaß macht es aus und man kann spaeter von ASM auf C umsteigen. Auch mit einem Arduino kann man viel anfangen. Im Vergleich zu den 70ern leben wir in einem Schlaraffenland an Möglichkeiten. Da sind eher wir die Begrenzung der Möglichkeiten.

Als Pragmatiker bevorzuge ich Projekte mit dauerhafter Funktionalität. da geht es mir weniger um den Lerneffekt als Solchen, sondern das Lernen nebenbei als der Weg zu Ziel. Aber jeder sieht das wahrscheinlich anders.

Ich bin froh, daß man heute keine umfangreiche Anordnung von ICs um den Mikroprozessor herum hat. Der Formfaktor eines uC ist nicht zu ignorieren. Ein MEGA328 würde einige LP vollgestopft mit Arbeiter-Käfern bedeuten. Da ist mir ein NANO oder Pro-Mini wesentlich lieber. Man muss sich das manchmal vor den Augen behalten.

Ich bin manchmal schockiert wenn ich die Schaltpläne älterer Meßgeräte studiere, daß sogar Firmen wie R&S damals Grosses mit uC wie z.B. Intel 8039 verwirklichten. Mein R&S Mobil Tester hat nur zwei 8039er drin und hat sogar HP-IB Schnittstelle. Ein moderner ESP32 bläst alles Vorherige fort.

Es hat bestimmt Sinn, sich etwas Moderneres zu wählen, wo die Werkzeuge (PC, IDE) und uC aufeinander abgestimmt sind. USB Verbindung zwischen Werkzeug und uC-LP ist Stand der Technik.

Duck und weg...

Gast #7882909
Lesenswert?

Gerhard O. schrieb:

Ich bin froh, daß man heute keine umfangreiche Anordnung von ICs um den Mikroprozessor herum hat. Der Formfaktor eines uC ist nicht zu ignorieren. Ein MEGA328 würde einige LP vollgestopft mit Arbeiter-Käfern bedeuten. Da ist mir ein NANO oder Pro-Mini wesentlich lieber. Man muss sich das manchmal vor den Augen behalten.

Ich mache den Quatsch ja auch seit vierzig Jahren und ich fasse keine Prozessorfamilie ohne Debugger mehr an: Mit einem STM32F103 + STLink V2 und Eclipse (STM32Cube IDE) ist man mit einen Fuenf-Euro-Schein dabei, bei Arduino beim Arduino Zero + IDE ist man bei 50EUR, RaspberryPico mit zweitem Pico als PicoProbe sind ca. 10EUR. Aber die geschenkte Lebenszeit (und der gesparte Frust) sind jeden Cent wert.

Und wenn Guenter unbedingt die 6502 benutzen will: Er hat ja einen Junior, arbeitet aber die Aufgaben im Junior-Buch nicht durch. Dann ist das nicht so wichtig.

OP #7883076
Lesenswert?

Klaus schrieb:

Auch da wieder: Kannst Du machen, bringt dir aber absolut nix, nada, niente. Außer halt Zeit totschlagen ohne Erkenntnisgewinn.

Günter K. schreibt: Außer, dass ich weiß, dass dieser Speicherbereich, 0x0200 bis 0x02FF, doch nicht funktioniert, - so war es immerhin doch noch einmal ein Versuch! Liebe Grüße Günter K. (ENK) PS.: Und natürlich probiere ich weiter, ich habe aber nicht vor, Euch unnötig zu stören.

#7883080
Lesenswert?

Günter K. schrieb:

auf dem Junior Computer geht es doch gar nicht anders. Also bitte, wieso nicht? - Falls Du einen anderen Computer meinst, mag es ja sein. Aber da, wo der Operations-Code steht, passiert doch auch das, was er macht.

Du verstehst es einfach nicht.

Ein Mensch schreibt ein Programm in Assembler-Anweisungen.

Also sowas wie

1
ldx #100
2
loop: 
3
dex
4
bne loop

Das kleine Programm lädt z.B. die Zahl 100 in das X-Register, dekrementiert X jeweils um 1, und solange die 0 nicht erreicht ist, dekrementiert es weiter, weil es zum Schleifenanfang (loop:) zurückspringt. Also eine klassische Verzögerungsschleife, wie sie auch in jedem Notenspielprogramm vorkommt.

JEDER Mensch der in Assembler programmiert macht das genau so und nicht anders.

Weil aber dein Junior Computer die Assembler-Anweisungen nicht versteht, brauchst Du die dazugehörigen Opcodes. Die erhältst Du, in dem Du die 4 Zeilen da oben kopierst, zu https://www.masswerk.at/6502/assembler.html gehst, dort in dem "src" Fenster den Assemblercode einfügst, einmal auf "assemble" drückst und schon hast Du a) den reinen Hex-Code und b) das Listing mit Hex-Code und den Originalen Assembler Anweisungen.

Du kannst natürlich auch in dein Junior-Computer Buch schauen und die Hex-Codes dort mühsam zusammenklauben. Das wäre ungefähr so wie wenn Du zwar einen Taschenrechner zur Verfügung hast, aber trotzdem darauf bestehst, 47110815 * 27364 mittels händischer, schriftlicher Multiplikation auszurechnen. Das geht, bringt aber niemand einen Erkenntnisgewinn.

Und wenn Du dann, statt die Hex-Codes mühsam in deinen Junior-Computer einzutippen, auf der oben genannten Webseite einmal auf "Show in Emulator" gehst, hast Du mit EINEM Mausklick etwas vor die, was ungefähr deinem Junior-Computer entspricht. Da kannst Du sämtliche Register beobachten, Assembler-Anweisung für Assembler-Anweisung. Der Knopf hierfür heißt "Single Step".

#7883103
Lesenswert?

Günter K. (enk) 27.05.2025 23:31

Außer, dass ich weiß, dass dieser Speicherbereich, 0x0200 bis 0x02FF, doch nicht funktioniert, - so war es immerhin doch noch einmal ein Versuch!

Hmm, komisch .. in diesem Video (Minute 26:02) haben sie ein Programm zum Togglen eine Portpins ab Adresse 200 eingetippt:

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

Angehängte Dateien:
OP #7883125
Lesenswert?

Christoph M. schrieb:

Hmm, komisch .. in diesem Video (Minute 26:02) haben sie ein Programm zum Togglen eine Portpins ab Adresse 200 eingetippt:

Günter schreibt: Hallo Christoph M. . Richtig, das ist ja auch nicht mein Computer. Es war schon ein guter Vorschlag von Wolfgang R. es bei 0x0300 zu probieren und es klappte. Meine RAMS muss ich tauschen, denn die meinen sind kaputt. Liebe Grüße Günter K. (ENK)

(Firma: www.wolfgangrobel.de) #7883127
Lesenswert?

Günter K. schrieb:

Meine RAMS muss ich tauschen, denn die meinen sind kaputt.

Da wäre ich mir erst sicher, wenn ich es überprüft habe. gib doch mal ab Adresse 0x200 lauter 0x55 als daten ein und lese dann heraus, was wirklich drinsteht. Dann das Spiel mit 0xAA als Datum, dann wieder lesen, was in den RAM-Zellen steht. Wenn du die Daten schreiben und lesen kannst und sich nichts verändert hat, dann sind deine RAMs nicht defekt!

also: AD 0100 DA 55

  • 55
  • 55
  • 55 ... AD 0100 ab hier sollte immer noch 55 im Datendisplay stehen

...

Gast #7883153
Lesenswert?

Christoph M. schrieb:

Günter K. (enk) 28.05.2025 08:12

Richtig, das ist ja auch nicht mein Computer.

Oh, das ist jetzt eine neue Erkenntnis. Ich dachte die ganze Zeit, wir diskutieren hier über einen Junior-Computer mit 6502.

Welchen Computer verwendest du jetzt genau? Kannst du mal ein Foto posten?

Nicht notwendig, er benutzt den Junior-Computer den Wolfgang gangbar gemacht hatte:

Beitrag "Re: Einfache CPU, einfacher Rechner, nur zum Lernen, Erfahrung?"

Gast #7883163
Lesenswert?

Klaus schrieb:

Thomas W. schrieb:

Nicht notwendig, er benutzt den Junior-Computer den Wolfgang gangbar gemacht hatte:

Aber es ist halt nicht derselbe, sondern nur der (bau)gleiche Rechner der im o.g. Video zu sehen ist.

Das Video (oder Guenter) haben nichts miteinander zu tun. Und das der Junior Speicher bei 0x0200-0x02ff hat ist gegeben.

Irgendwie ist das alles ncht zielfuehrend.

#7883171
Lesenswert?

Klaus (feelfree) 28.05.2025 09:39

Aber es ist halt nicht derselbe, sondern nur der (bau)gleiche Rechner der im o.g. Video zu sehen ist.

Jetzt stellt sich noch die Frage, ob er auch "funktionsgleich" ist.
Ich würde trotzdem gerne den Computer optisch sehen. Vielleicht gab es ja Varianten.

Günter: Kannst du ein Bild posten ?

Gast #7883175
Lesenswert?

Christoph M. schrieb:

Klaus (feelfree) 28.05.2025 09:39

Aber es ist halt nicht derselbe, sondern nur der (bau)gleiche Rechner der im o.g. Video zu sehen ist.

Jetzt stellt sich noch die Frage, ob er auch "funktionsgleich" ist. Ich würde trotzdem gerne den Computer optisch sehen. Vielleicht gab es ja Varianten.

Günter: Kannst du ein Bild posten ?

Ich bin zwar nicht Guenter, aber: In the Beginning hat Guenter einen Junior-Computer vom Dachboden rausgekramt, funktionslos. Der Rechner ging nach Wolfgang, funktionsfaehig gemacht, Fotos gemacht und zurueck geschickt (an Guenter).

#7883186
Lesenswert?

Klaus schrieb:

Du kannst natürlich auch in dein Junior-Computer Buch schauen und die Hex-Codes dort mühsam zusammenklauben.

So hatte ich auch mal angefangen. Allerdings war das Berechnen der Sprünge und Calls extrem nervig und fehleranfällig. Und wenn man auch nur eine Instruktion eingefügt hat, waren alle Berechnungen für die Katz. Das hat mich dann so genervt, daß ich mir in Turbo-Pascal einen Assembler für den 8051 selber geschrieben habe.

#7883189
Lesenswert?

Peter D. (peda) 28.05.2025 10:13

Und wenn man auch nur eine Instruktion eingefügt hat, waren alle >Berechnungen für die Katz.

Da würde ich auch den Grund dafür sehen, dass das Programm, welches Günter an Adresse 0x200 programmiert hat für die Adresse 0x300 kodiert war.
Oder er hat aus vielleicht aus Versehen das Programm in seinen Z80 Computer eingetippt, der ja auch noch rumliegt.

#7883251
Lesenswert?

Hallo, Falk B. schrieb im Beitrag #7883226:

Das verstehst du falsch. SEINE RAMs SIND defekt. Die des Junior-Computers nicht . . .

Falk, lass es einfach gut sein. Ich weiß das dich Günters Verhalten (und auch Josef mit seiner abstrusen 8-Bit-CPU) wahnsinnig macht und kann das auch gut nachvollziehen, aber es hat keinen Zweck immer und immer wieder darauf zurück zu kommen. Nimm es einfach hin, du wirst Günter sowieso nicht erreichen.

rhf

#7883254
Lesenswert?

Roland F. schrieb:

Falk, lass es einfach gut sein. Ich weiß das dich Günters Verhalten (und auch Josef mit seiner abstrusen 8-Bit-CPU) wahnsinnig macht

Keine Sekunde. Ich weiß was das Problem dieser Leute ist und ich habe es schon LANGE verstanden und akzeptiert.

Aber das Gewusel der Leute hier, die das NICHT kapiert haben und allen Ernstes glauben, dem Günter mit irgendwelchen Hinweisen oder Empfehlungen auch nur eine Sekunde was vermittelen zu können, ist schon amüsant. Naja, nicht wirklich, eher ein Anlaß zum Kopfschütteln.

es einfach hin, du wirst Günter sowieso nicht erreichen.

Hab ich keine Sekunde (mehr) vor.

#7883270
Lesenswert?

Klaus schrieb:

Da stehen ca. 20 Stück davon im Programm. Danach ein Semikolon und eine genaue Erklärung, was der Opcode macht.

Nö, in dem Programm stehen Mnemonics, die der Assembler in einen für den Prozessor verstehbaren Maschinenbefehl (Opcode) umsetzen soll.

Ich frage mich allerdings was der TO mit dem Opcode will, denn den wird er vermutlich noch schlechter verstehen, da das nur Zahlenkolonnen sind. Beispiel (Z80): "inc b" wird zu 0x04. Um das zu verstehen müßte man die komplette Tabelle mit den Mnemonics im Kopf haben.

#7883279
Lesenswert?

Hans schrieb:

Ich frage mich allerdings was der TO mit dem Opcode will,

Eintippen, denn mehr kann der Junior-Computer nicht. Aber so neumodischer Kram wie Assembler will er ja nicht, weil er ja "genau verstehen will, was der Prozessor macht". -> AI (damit meine ich nicht artificial intelligence)

denn den wird er vermutlich noch schlechter verstehen, da das nur Zahlenkolonnen sind. Beispiel (Z80): "inc b" wird zu 0x04. Um das zu verstehen müßte man die komplette Tabelle mit den Mnemonics im Kopf haben.

Es hat schon einen Grund, warum in den Anfangsjahren der IT Assembler erfunden wurde und nicht mehr mit Maschinencode programmiert wurde. Aber bestimmte Leute verstehen das halt nicht . . .

OP #7883330
Lesenswert?

Ooohh, soo viele Infos

Hallo liebe Leute,

Christoph M. schrieb:

Klaus (feelfree) 26.05.2025 17:25

Das dürfte falsch sein: das ORG muss vor dem Label stehen, sonst ist z.B. PADD=0x$1A80 statt 0x$1A81. PAD: .org $1A80 PADD: .org $1A81 PBD: .org $1A82 PBDD: .org $1A83

Ja, der Begriff "Label" erscheint oder erschien mir neu. Weil ich das noch nicht kannte, nannte ich das mal TARGET, oder Ziel. Für mich, der OP-CODES eingeben muss, stelle ich das ganz nach vorne. Für mich als Anfänger, ist es einfacher die MNEMONICS mitzuschleppen, als direkt in ASSEMBLER zu programmieren.

Was aber noch wichtig für mich ist, das sind die u/Zeiten/u. Denn ich muss, in dem vorstehenden Programm für mehrere Töne und sei es der Gleiche, in der SR "ausscheren" bzw. dort etwas tun, zB.: ZP-Incrementieren, das reicht innerhalb einer Halbwelle im höchsten Ton. Warum dort(?), weil dort die Zeit, die Kürzeste ist.

Ich muss die Arbeit auf mehrere Halbwellen verteilen. Im Moment stelle ich mir vor, dass die Zeit sehr knapp ist. Aber auch der kürzeste Ton wird mehrere Halbwellen haben, Nicht nur die positive- sundern auch die negative Halbwelle, - so dass, die Symmetrie erhalten bleibt, und die Pausen-Länge, die Ton-Höhe, die Ton-Länge bestimmt werden kann, aus dem dann die Gesamt-Länge zusammengesätzt werden kann.

b/Nur so, kann ich mich in die Problematik für eine Lösung hineindenken./b

Nur sogesehen sind die Vorschläge nicht so schlecht. Irgendwelche überflüssigen Bemerkungen, von wem auch immer, übersehe ich einfach. - Ich übersehe aber nicht, die Zusammenhänge die dazu führen könnten.

Gleich bekomme ich Besuch, muss vorbereiten. Liebe Grüße Günter K. (ENK)

#7883352
Lesenswert?

Christoph M. schrieb:

Das dürfte falsch sein: das ORG muss vor dem Label stehen, sonst ist z.B. PADD=0x$1A80 statt 0x$1A81.

Ja, das sehe ich auch so. Assembler arbeiten jede Zeile von links nach rechts ab. Erst wird also PADD auf den gerade gültigen PC gesetzt und danach der PC auf den Wert der org-Anweisung. Oft erlauben Assembler solche Fehler auch nicht. Ein Label darf nicht in einer Zeile mit einer Präprozessoranweisung stehen.

Gute Programmierer schreiben ein Label immer in eine extra Zeile ohne weitere Statements. Das erhöht die Übersichtlichkeit.

#7883356
Lesenswert?

Günter K. schrieb:

b/Nur so, kann ich mich in die Problematik für eine Lösung hineindenken./b

Kannst du nicht. Du könntest aber eines der hier vielfache geposteten Programme, die teilweise ganze Tonleiter oder Melodien spielen, mit richtigen Tonlängen, versuchen zu verstehen. Aber das willst du ja nicht. Stattdessen schwadronierst du über alles, nur nichts über was dich weiterbringt.

Gast #7883362
Lesenswert?

Peter D. schrieb:

Christoph M. schrieb:

Das dürfte falsch sein: das ORG muss vor dem Label stehen, sonst ist z.B. PADD=0x$1A80 statt 0x$1A81.

Ja, das sehe ich auch so. Assembler arbeiten jede Zeile von links nach rechts ab. Erst wird also PADD auf den gerade gültigen PC gesetzt und danach der PC auf den Wert der org-Anweisung.

Kannst Du Dich noch an Single-Pass oder Double-Pass-Assembler erinnern? Beim Double-Pass wurden beim zweiten Durchlauf die noch offenen Labels bestimmt.

War natuerlich nur spannend bis schnelle Massenspeicher (vulgo 8"-Disketten) auf den Markt kamen :-)

Gute Programmierer schreiben ein Label immer in eine extra Zeile ohne weitere Statements. Das erhöht die Übersichtlichkeit.

Unabhaengig von Sprache und CPU: Da hast Du recht, da hast Du so recht. Aussergewoehnliche Programmierer wuerden sogar einen Kommentar spendieren (frei nach: Real programmers don’t comment their code. If it was hard to write it should be hard to read).

Gast #7883365
Lesenswert?

Christoph M. schrieb:

Hier mal kurz was für die Profis: Ich versuche gerade den cc65 dazu zu bringen, Code für den Junior-Computer zu erzeugen:

https://cc65.github.io/

Für verschiedene Computermodelle gibt es unterschiedliche Konfigurationsfiles. Welches ist das kleinst Modell in der Liste des oben aufgeführten Modelle, die dem Junior-Computer am nächsten kommen?

So aus der kurzen Liste muesste der Sym-1 die kleinste Maschine (RAM bei 0x0000-0x0fff, beim Junior waere das 0x0000-0x07ff [ich habe die Expansion-Card]). Es fehlt natuerlich Stdio.h (Du hast kein I/O), es fehlt Disk i/o.

#7883408
Lesenswert?

Christoph M. schrieb:

Hier mal kurz was für die Profis: Ich versuche gerade den cc65 dazu zu bringen, Code für den Junior-Computer zu erzeugen:

Thomas W. (datenreisender) 28.05.2025 15:54

So aus der kurzen Liste muesste der Sym-1 die kleinste Maschine (RAM bei 0x0000-0x0fff, beim Junior waere das 0x0000-0x07ff [ich habe die Expansion-Card]).

Ich habe es hier mal mit dem "blink" Programm versucht:
Beitrag "6502 C-Compiler cc65"
Compilieren tut es, auch wenn ich als Platform 'none' auswähle.

Es fehlt natuerlich Stdio.h (Du hast kein I/O), es fehlt Disk i/o.

Da liegt ein wenig die Herausforderung: Man muss irgendwie ein Maschinenmodell ohne diese Peripheriebibliotheken verwenden, damit nicht einige riesige Library mit-gelinkt wird. Ich könnte die relevanten Code-Teile aus dem Compiler-Output heraus kopieren und dann Assemblieren, aber dass ist mühsam und eigentlich muss der Prozess ja in der Lage sein, den Hex-Code an der richtigen Stelle zu erzeugen.

OP #7883522
Lesenswert?

Cyblord -. schrieb:

dann kommt dazu dass plötzlich jeder C64-Opa hier meint, jetzt sei die Stunde irgendwelchen Kruden Details oder Anekdoten zu Assembler rauszuhauen.

Liebe Leute, das hatte ich überlesen, lieber Cyblord, bitte, wie war das gemeint? Bitte was heißt: "... jeder C64-Opa hier ...", gibts hier noch mehr? Bitte was heißt: "... die Stunde irgendwelchen Kruden Details ..."? Bitte was ist gemeint mit: "... Anekdoten

zu Assembler rauszuhauen."

Ich bin kein Fachmann, in dieser Sache, das habe ich auch nie behauptet. Jetzt kommt noch die Antwort auf die Frage:

Cyblord -. schrieb:

Vielleicht sollte der TE auch nochmal klarstellen was genau sein (Lern)Ziel ist.

Nun ja: Ich möchte, durch das logische Verhalten des Computers verstehen, - und Sachen machen, was man mit dem Computer machen kann. Es braucht nicht nur der JC zu sein, aber ich möchte verstehen. Natürlich, ich finde, der JC ist ein mit dem 6502 schöner Computer, bei dem ich auch noch viele Befehle lernen muss.

Zwar stelle ich es mir mit einem Timer leichter vor, aber es ist eine Herausforderung, so wie Klaus es vorschlägt. - Vielleicht sollte ich auch nicht so vorschnell sein, -und so finde ich, erstmal die dazugehörenden Gedanken zusammenfassen, bevor ich sie so wie ich es mir vorstelle, zu Papier bringen und dann erst vorstellen. Jetzt muss ich noch einkaufen gehen. Liebe Grüße Günter K. (ENK)

#7883544
Lesenswert?

Günter K. schrieb:

Zwar stelle ich es mir mit einem Timer leichter vor, aber es ist eine Herausforderung, so wie Klaus es vorschlägt.

Es ist vielleicht für einen im IT-/Programmierbereich normal vorgebildeten Menschen eine kleine Herausforderung. Für dich ist es jedoch schlicht unmöglich.

Ich möchte, durch das logische Verhalten des Computers verstehen

Also vergiss dein Vorhaben, Assembler zu lernen. Such dir was Einfacheres und besser zu Bedienendes. Grundsätzlich hast Du ja kein Problem damit, einen Computer zu bedienen, wenn ich mir deine mit Excel erstellten Programmierversuche so anschaue.

#7883644
Lesenswert?

Vielleicht sind die bisherigen Programme für Günter auch zu kompliziert.
Es stellt sich also die Frage: Was wäre das einfachste Programm, das etwas tut.
Man könnte z.B. die Ports so beschreiben, dass das erste Siebensegment-Display eine '8' anzeigt.
Weiß jemand, wie man das macht?

Gast #7883683
Lesenswert?

Christoph M. schrieb:

Man könnte z.B. die Ports so beschreiben, dass das erste Siebensegment-Display eine '8' anzeigt. Weiß jemand, wie man das macht?

Ja. Ich.

Im Anhang findest Du den IO-Teil des Juniors. Das Display ist gemultiplexed und PB1-PB4 waehlen die Stelle des Displays aus, PA0-PA6 waehlen das entsprechende Segment des Displays aus.

Damit Du wirklich ein "Zeichen" auf dem Diplay angezeigt bekommst, musst Du das Display dann alle paar Millisekunden updaten.

Die Beschreibung findest Du im Elektor-Junior Buch II, p. 131. Die Routinen SHOW und CONVD findest Du auch erklaert. Und die Beschreibung ist sogar recht gut, selbst ich habe das damals als 16-Jaehriger verstanden.

Fuer Guenter ist das nix, die Ton-Erzeugung ab p.45 im gleichen Buch bekommt er ja auch nicht hin.


P.S.: Das war ein wenig falsch oder vereinfacht: Man kann mit Auswahl von Pb1-4 eine Stelle auswaehlen und dann ein Pattern auf dieser Stelle anzeigen. Aber: Es ist eigentlich fuer Multiplexing gerechnet, die 68Ohm-Widerstaende sind etwas zu klein, und die Stroeme ins das Display etwas zu gross.

Angehängte Dateien:
#7883706
Lesenswert?

Thomas W. (datenreisender) 29.05.2025 09:57

PB1-PB4 waehlen die Stelle des Displays aus, PA0-PA6

Danke dafür.
Dann müsste

1
lda #$ff
2
sta PBDD ; PORT B alles auf Ausgang
3
sta PADD ; PORT A alles auf Ausgang
4
sta PAD ; alle Segmente an
5
lda #2
6
sta PBD ; erstes Digit auswählen
7
brk

auf der ersten Anzeige eine helle '8' erzeugen. Korrekt?

Gast #7883715
Lesenswert?

Christoph M. schrieb:

Thomas W. (datenreisender) 29.05.2025 09:57

PB1-PB4 waehlen die Stelle des Displays aus, PA0-PA6

Danke dafür. Dann müsste

1
> lda #$ff
2
> sta PBDD ; PORT B alles auf Ausgang
3
> sta PADD ; PORT A alles auf Ausgang
4
> sta PAD ; alle Segmente an
5
> lda #2
6
> sta PBD ; erstes Digit auswählen
7
> brk
8
>

auf der ersten Anzeige eine helle '8' erzeugen. Korrekt?

Noe. Du hast den 74145 vergessen (Du hattest die Schaltplaene selbst gepostet Beitrag "Re: Einfache CPU, einfacher Rechner, nur zum Lernen, Erfahrung?"). Die Adresse der Displaystellen sind 0x08,0x0a,0x0c,0x0e,0x10 und x012.

Mit einem beherzten lda #0x08 solltest Du die erste Stelle mit ca. 50 - 70mA bestromen :-) Schoen hell, aber die Effizienz der 40 Jahren alten Displays sind so oder so nicht mehr so prall.

#7883742
Lesenswert?

Falk B. schrieb:

Es hat schon einen Grund, warum in den Anfangsjahren der IT Assembler erfunden wurde und nicht mehr mit Maschinencode programmiert wurde. Aber bestimmte Leute verstehen das halt nicht . . .

Natürlich hat das einen Grund warum man die Rechner mit einer für Menschen verständlicheren Sprache programmieren wollte. Die Opcodes, die noch dazu für jeden Prozessor anders waren/sind, kann sich eigentlich keiner merken. Die Mnemonics kann man sich leichter merken, zumal sie i.d.R. von der Bezeichnung her mehr oder weniger selbstsprechend waren. Mit der Assemblersprache wurde es auch möglich Code leichter austauschbar zu machen, weil die Übersetzung in den Opcode der zum Prozessor passende Assembler gemacht hat. Und ja natürlich hat man Anfangs die Hexzahlenkolonnen zu Fuß eingehackt, allerdings kenne ich persönlich niemanden, was natürlich nichts bedeuten muß, der Programme im Opcode entwickelt hat. Da stand am Anfang immer ein Assemblerlisting. Meist hat man dann nach den Zeilennummern eine Spalte frei gelassen, wo man nach dem Erstellen des Programmes den Opcode eingetragen hat. War eigentlich auch gar nicht anders möglich, da man die Sprungadressen ja erst berechnen konnte, wenn das Programm fertig war.

Ich habe mal eine zeitlang beruflich mit Assembler am E60/E100 (sowjetische PDP11 Clone) arbeiten müssen. Allerdings hat man dort die Mnemonics in einem recht einfachen Editor eingegeben und dann mit dem Assembler übersetzen lassen. Allerdings hat der Assembler das Objektfile dann auf Diskette gespeichert und man mußte das natürlich nicht mehr per Hand eintippen.

#7883743
Lesenswert?

Thomas W. (datenreisender) 29.05.2025 11:04

Mit einem beherzten lda #0x08 solltest Du die erste Stelle mit ca. 50 - 70mA bestromen :-) Schoen hell, aber die Effizienz der 40 Jahren alten Displays sind so oder so nicht mehr so prall.

(5V-1.6V)/68 Ohm = 50mA .. Da wäre die Frage, wie groß der Spannungsabfall am 74154 und dem ULN ist. Da geht bestimmt noch mal was weg, so dass es keinen "KillerPoke" für den Juniorcomputer gibt.
Falls ich es bisher unterging: Ich habe keinen Juniorcomputer, sondern nur die Virtualisierung auf dem PiPico:

Beitrag "6502 Emulator PiPico"

Deshalb frage ich genau nach, wie die Hardware anzusteuern ist. Beim Ablesen aus dem Schaltplan verdreht man gerne mal Bits- und Polaritäten. Plötzlich ist die Anzeige dann Low- statt High-aktiv.

Gast #7883763
Lesenswert?

Christoph M. schrieb:

Thomas W. (datenreisender) 29.05.2025 11:04

Mit einem beherzten lda #0x08 solltest Du die erste Stelle mit ca. 50 - 70mA bestromen :-) Schoen hell, aber die Effizienz der 40 Jahren alten Displays sind so oder so nicht mehr so prall.

(5V-1.6V)/68 Ohm = 50mA .. Da wäre die Frage, wie groß der Spannungsabfall am 74154 und dem ULN ist. Da geht bestimmt noch mal was weg, so dass es keinen "KillerPoke" für den Juniorcomputer gibt.

Nein, den "Killerpoke" gibt es nicht, aber ein "Kill-Switch" war die Abschaltung des Displays: Der Spike hat die CPU oft aus dem Takt geworfen.

Deshalb frage ich genau nach, wie die Hardware anzusteuern ist. Beim Ablesen aus dem Schaltplan verdreht man gerne mal Bits- und Polaritäten. Plötzlich ist die Anzeige dann Low- statt High-aktiv.

Wenn man auf Port A (PAD) eine 0x00 schreibt bekommt man eine "8" ein Display, schreibt man eine 0x7f rein bekommt man eine "Leerstelle" (alles lt. Junior Buch II, mein Junior liegt z.Z. im Schrank).

#7883884
Lesenswert?

Günther, das wäre doch eine schöne Aufgabe für dich: Wie zeigt man eine 4 statt einer 3 ?

1
; Junior Computer Siebensegmentansteuerung
2
;
3
; 7 segement codes
4
;  $C0,  # 0
5
;  $F9,  # 1
6
;  $A4,  # 2
7
;  $B0,  # 3
8
;  $99,  # 4
9
;  $92,  # 5
10
;  $82,  # 6
11
;  $F8,  # 7
12
;  $80,  # 8
13
;  $90   # 9
14

15
; MOS6532 PIA addrese $1A80
16
PAD=$1A80
17
PADD=$1A81
18
PBD=$1A82
19
PBDD=$1A83
20

21
    .org 300
22
    lda #$ff
23
    sta PBDD    ; PORT B alles auf Ausgang
24
    sta PADD    ; PORT A alles auf Ausgang
25

26
    lda #$B0    ; Zahl 3
27
    sta PAD     ; Segmente schreiben
28

29
    lda #8      ; Adresse 8 für erstes Display
30
    sta PBD     ; erstes Digit auswählen
31

32
    brk

Hex-Code zum Eintippen in den Junior-Computer:

1
0300: A9 FF 8D 83 1A 8D 81 1A
2
0308: A9 80 8D 80 1A A9 08 8D
3
0310: 82 1A 00
Angehängte Dateien:
#7883889
Lesenswert?

Christoph M. schrieb:

Günther, das wäre doch eine schöne Aufgabe für dich: Wie zeigt man eine 4 statt einer 3 ?

Du bist ein Optimist ;-)

Na wenn schon, dann bitte als Tabelle oder wenigstens als direkt nutzbare Konstante. Denn sonst hat man wieder haufenweise magische Zahlen, die man eigentlich nicht haben will.

1
; 7 segement codes
2
Z0 = $C0
3
Z1 = $F9
4
Z2 = $A4
5
Z3 = $B0
6
Z4 = $99
7
Z5 = $92
8
Z6 = $82
9
Z7 = $F8
10
Z8 = $80
11
Z9 = $90
12

13
   lda #Z3
Gast #7883916
Lesenswert?

So klappt das nicht: Um den BRK zu benutzen muss der Reset-Vector $1c00 in $1A7E (= 0x00) und $1a7f = (0x1c) geschrieben werden. Ich bin mir sicher, dass Guenter das nie gemacht hat (das haette er bestimmt mit einer PowerPoint-Folie erklaert).

Wenn der Vektor gesetzt waere, wuerde das Display kurz flackern und dann wieder den Programmcounter (0x0314) anzeigen.

Es ist auch ganz gross in Kapitel 3 ("Programmieren") auf p.57 des Junior-Computer Buch I erklaert.

Das ist doch alles Humbug.

Gast #7883998
Lesenswert?

Thomas Z. schrieb:

Thomas W. schrieb:

Ich bin mir sicher, dass Guenter das nie gemacht hat (das haette er bestimmt mit einer PowerPoint-Folie erklaert).

wie auch? Der Junior hat nur RAM von 0x000..0x03FF. Die Adresse 0x1A7E liegt im Eprom, dass man bekanntlich nicht beschreiben kann.

Noe. Die 6532 (RIOT, RAM + IO + Timer) ist bei 0x1A00 - 0x1AFF. Fuer Dich dann: 0x1A00 - 0x1A7F sind 128 Bytes RAM im RIOT, 0x1A80 - 0x1A83 ist IO und dann ganz viele Timer und Flankendetektoren (PA7).

Ich weiß ja nicht woher du deine Infos hast, aus dem Buch ganz sicher nicht.

Fuer Anfaenger: Junior Buch I und II, speziell Buch II, Kapitel 6, Page 33 bis 99, Elektor-Verlag, 1980.

P.S.: Mit Bild: Beitrag "Re: Einfache CPU, einfacher Rechner, nur zum Lernen, Erfahrung?"

OP #7884037
Lesenswert?

Hallo liebe Leute,

ich hatte auch das Junior-Buch II, hier schon auf dem Schirm gehabt. Da las ich auch von den Flanken-Detektoren. (Jetzt aber nicht mehr gefunden.) Unter anderem las ich von einer Art-Klaviatur.

Heute auf Chr.-Himmelfahrt, fand ich noch 6 Tasten;(für 6 Töne) für diese Tasten, fand ich ein schönes Lied (welches ich noch nicht nenne). Diese 6 Tasten, werde ich auf eine Europa-Platine löten. Das Lied hat nur 6 Töne, aber -zum Scherz-, passen diese, - so, auf einer Europa-Platine, dass ich nur wenig Brücken legen brauche, die Leiterbahnen in Längsrichtung (-weitgehend-) nicht unterbrochen werden. Die Schalter haben 4 Anschlüsse, von der je 2 auf der Leiterbahn liegen.
(
-Schutz-Dioden-). Die 6 Tasten, passen auf die Breite der Platine, - in Längs-Richtung liegen die Leiterbahnen der Platine. Dafür wird das Lied programmiert, die Taster auf sortiert. Nach der üblichen C-Dur-Tonleiter hat das Lied keine Halbtöne. (Je nach Ansicht-weise aber wohl, dann liege C, D, E, höher. – Diese Sichtweise ist aber nicht wichtig!).Das Lied, spielt aber leider, nicht automatisch. In diesem Falle hier, muss man Programmieren.

  • Ein solches "Programm" schrieb ich schon mal für den C64 in Maschinensprache. Warum schreibe ich "Programm" zwischen "" - ? Weil dieses "Programm" im Wesentlichen, nur Zuweisungen waren. Das ist sehr lange her. Die Tastensetzung machte ich in diesem Falle nach der Fingerzählung für die Violine, z.B.: 1., 2., 3. u. 4. Finger, wobei der 4. Finger die volle Quinte ist.
    (Manchmal ist er bei der Violine im Notenblatt vorgeschrieben.) - (ich spiele aber keine Violine mehr. Das Banjo ging beim Umzug zu Bruch.) Die Ordnung der Abstände auf den Violinen-Brett, sind nicht gleich. Wohl aber die Zählung nach Noten. - So, setzte ich die Tasten auf dem C64; - und für den Halbton (beim Notenzeichen) eine zusätzliche Taste. Der Prozessor hieß 65010 und steuerte direkt die Sound-Register, die man direkt absprechen konnte. Der C64 hatte keine 64K sondern nur 52K der Rest war 'gespiegelt' wie man es nannte. Bestimmte Bus-Leitungen stellten kein CS (Chip Select) zur Verfügung, das wirkt sich so aus -als wenn- dort auch Daten vorhanden wären. Der PET hatte nur 4 K. - Mein CBM-PET hatte nur 8 K, den hatte ich selbst erweitert auf 32 K. Danach wurde er erweitert auf 80 Zeichen, Gros-Klein-Schrift und Zusatz-Monitor;
    und für einige weitere Software-Erweiterungen; - das hatte ich selber nicht mehr gemacht.
  • Gute Nacht liebe Leute! Liebe Grüße Günter K. (ENK)
#7884073
Lesenswert?

Günter K. schrieb:

In diesem Falle hier, muss man Programmieren.

Was du leider nicht kannst und auch nie können wirst. Wie kommt man nur auf die völlig wahnsinnige Idee, wenn man es noch nicht mal geschafft hat, 2 verschiedene Töne abzuspielen?

Das ist wie ein 3-jähriger, der es gerade geschafft hat, mit seinem Fahrrad mit Stützrädern sich den ersten Meter vorwärts zu bewegen, und dann verkündet, er steige jetzt aufs Einrad um.

Günter K. schrieb:

welche Funktion hat ORG

Abkürzung für Origin, zu deutsch Ursprung -> die Adresse wo der Code abgelegt wird.

#7884100
Lesenswert?

Klaus schrieb:

Das ist wie ein 3-jähriger, der es gerade geschafft hat, mit seinem Fahrrad mit Stützrädern sich den ersten Meter vorwärts zu bewegen, und dann verkündet, er steige jetzt aufs Einrad um.

3-Jährige sind prädestiniert das zu schaffen (und fast nur die!). Die fliegen ein paarmal kapital auf die Nase, heulen, steigen wieder auf und fahren. Bei Erwachsenen ist das nahezu aussichtslos.

OP #7884106
Lesenswert?

Hallo liebe Leute,

Thomas W. schrieb:

Christoph M. schrieb:

Man könnte z.B. die Ports so beschreiben, dass das erste Siebensegment-Display eine '8' anzeigt. Weiß jemand, wie man das macht?

Ja, Wolfgang R. schickte mir mal so etwas, hier in die Liste. Ich hatte es ausprobiert, und es hatte geklappt!! - Darüber freute ich mich sehr! DANKE lieber Wolfang R.

Das muss ich mir nochmal heraussuchen.

Das war dadurch, weil ich mich erinnerte, als ich den JC gekauft hatte, dass der JC: scheinbar selbständig "Junior" auf dem DISPLAY schrieb. Nun das ist ja -so- lange her, dass ich nicht mehr weiß, wie es dazu kam. Vermutlich ein Auszug aus dem MONITOR.

Und so, wie ich es jetzt sehe, könnte man: "DISPLAY" auch auf dem DISPLAY durchlaufen lassen, denn es sind 7 statt 6 Zeichen, oder mal "DSPLAY" schreiben.

Das JC-Buch II downloade ich mir nochmal auf meinen Computer. Dankeschön für Eure Ideen!! Eines muss ich ganz ehrlich sagen, ich bin nicht so gebildet, und ich behalte auch nicht alles, aber noch vieles.

Nachher kaufe ich noch weitere 7 Schälterchen, u. Dill-Schälterchen. Dann kann ich so noch weitere Töne dazu wählen (ander abwählen); dann wird die Europakarte mehr bestückt. (Für die Spielerei!) Dann kann man -irgendwie-, mehr Töne wählen. Die LEGO-Bausteine passen auch auf diese Schalterart. Somit, könnte man auch lange Tasten bauen; diese brauche aber 2 Taster zum wippen. So, ich fahre jetzt in die Stadt. Muss mich beeilen! Liebe Grüße Günter K. (ENK)

Gast #7884159
Lesenswert?

Günter K. schrieb:

Das war dadurch, weil ich mich erinnerte, als ich den JC gekauft hatte, dass der JC: scheinbar selbständig "Junior" auf dem DISPLAY schrieb. Nun das ist ja -so- lange her, dass ich nicht mehr weiß, wie es dazu kam.

Ganz einfach: Du hast die Elektor 05/1980 gesehen (siehe Anhang). Und das Prograemmchen zum Anzeigen des Textes "Junior" kam spaeter.

Vermutlich ein Auszug aus dem MONITOR.

Noe.

Angehängte Dateien:
#7884502
Lesenswert?

Günter schrieb:

Welche Funktion hat ORG

1
Die ORG-Direktive (kurz für "Origin") im 6502-Assembler legt die Startadresse im Speicher fest, ab der der nachfolgende Code oder die Daten abgelegt werden sollen. Mit ORG bestimmst du also, an welcher Adresse im Speicher dein Programm oder ein bestimmter Abschnitt davon beginnt. Das ist besonders wichtig, wenn du Programme für Systeme schreibst, bei denen der Code an einer festen Speicherstelle erwartet wird, wie z.B. bei ROMs oder beim Startvektor eines Rechners

Hallo Günter, für solche Fragen nimmst du am besten
https://www.perplexity.ai/

Wenn du folgendes eintippts: 6502 assembler: welche Funktion hat ORG
kommt die obige Antwort.
Die ist deutlich ausführlicher, als das was wir dir hier erklären können und du verstehst sie besser. Wenn dann was unklar ist, frage die KI einfach weiter.

OP #7884588
Lesenswert?

Hallo liebe Leute, lieber Christoph M.,

Du hast ja schon alles richtig gesagt, DANKESCHÖN! Die https://www.perplexity.ai/ hat hier dieses Mal nicht richtig reagiert Als ich die Frage nach dem FLAG stellte aber wohl; auch hierfür ein DANKESCHÖN dafür.

Und Leute, vor allen Dingen Klaus, ich habe mir schon Gedanken gemacht, (Wie gewüscht, ohne TIMER) nachher bin ich zu einer Geburtstagsfeier eingeladen. Gestern war Grillen, das war sehr schön und freue mich jetzt zur Geburtstags-Feier zu gehen.

Das Programm, welches ich schreiben werde heißt: Martinshorn.(asm) Allerdings leider nur, vorläufig NUR wie gewohnt in Maschinensprache mit beigefügten MNEMONICS.

Später, wenn ich mich mal mit dem Compiler und den Loops beschäftigt habe, Dann weiß ich vielleicht teilweise, was da passiert.

Kurzum, ich habe mir schon Gedanken gemacht. Liebe Grüße Günter K. (ENK)

#7884644
Lesenswert?

Moin,

Ich bin der Meinung, daß man Günter auf seine eigene Art und Weise lernen lassen muß. In seinem Alter ist das vielleicht ganz natürlich. Ich merke es auch bei mir selber, daß ich mich nicht mehr so flexibel wie früher bin. Deshalb kann ich die Dichotomie zwischen Euch und ihm gut verstehen. Ich bewundere andrerseits auch Eure verständnisvolle Geduld und Ausdauer.

Persönlich würde ich zu Arduino oder Bascom auf Arduino raten. Da hat man eben eine komplett ausgearbeitete Arbeitsumgebung und standardisierte HW. Auch in einer Hochsprache wie BASIC oder auch C kann man die Prinzipien des Programmieren ausreizen. Und letztlich lassen sich benützbare Gerätschaften damit bauen. Da wäre sogar eine der vielen Arduino Baukoffer, gefüllt mit vielen netten Peripheriebausteinen und Steckbrett praktisch.

Duck und weg...

#7884645
Lesenswert?

Hallo Günter,

hier noch mal das verbesserte Siebensegmentprogramm. Am Anfang habe das .org beschrieben.
Dank dem Hinweis von Thomas wird das Programm jetzt mit einer Endlosschleife quasi "angehalten", so dass die Zahl stehen bleibt und nicht gleich verschwindet.

1
; Junior Computer Siebensegmentansteuerung
2
;
3
; original version:
4
; 2025-05-29, mchris
5
; improvements: Falk B., Thomas W.
6
;
7
; 7 segement codes
8

9
Z0 = $C0
10
Z1 = $F9
11
Z2 = $A4
12
Z3 = $B0
13
Z4 = $99
14
Z5 = $92
15
Z6 = $82
16
Z7 = $F8
17
Z8 = $80
18
Z9 = $90
19

20
; MOS6532 PIA addrese $1A80
21
PAD=$1A80
22
PADD=$1A81
23
PBD=$1A82
24
PBDD=$1A83
25

26
    .org $300   ; Startaddresse für den Assemblercode
27

28
    lda #$ff
29
    sta PBDD    ; PORT B alles auf Ausgang
30
    sta PADD    ; PORT A alles auf Ausgang
31

32
    lda #Z3    ; Zahl 3
33
    sta PAD     ; Segmente schreiben
34

35
    lda #8      ; Adresse 8 für erstes Display
36
    sta PBD     ; erstes Digit auswählen
37

38
end:
39
    jmp end ; springe immer wieder zum ende (Programm bleibt quasi stehen)

Hier noch der Hex-Code zum eintippen.

1
0300: A9 FF 8D 83 1A 8D 81 1A
2
0308: A9 99 8D 80 1A A9 08 8D
3
0310: 82 1A 4C 12 03

Das Designziel hier war ein möglichst kurzer Code, so dass man nicht so viel tippen muss.

#7884655
Lesenswert?

Björn W. (bwieck) 31.05.2025 16:38

Der Hexcode stellt Zahl 4 dar..

Krass, habe es gerade ausprobiert, du hast tatsächlich Recht. Ich hätte nicht gedacht, dass jemand so genau hinschaut. Wie hast du denn das gesehen?

Da muss mir wohl beim kopieren ein Fehler unterlaufen sein ..

aber jetzt:

1
0300: A9 FF 8D 83 1A 8D 81 1A
2
0308: A9 B0 8D 80 1A A9 08 8D
3
0310: 82 1A 4C 12 03
#7884658
Lesenswert?

Christoph M. schrieb:

Da muss mir wohl beim kopieren ein Fehler unterlaufen sein ..

aber jetzt:

Ist dir klar dass der TE sich absolut gar nichts aus deinen kleinen Aufgaben macht, ja sie nicht mal wahrnimmt? Ich meine klar, du machst nicht den Eindruck als ob es dich juckt ob dir jemand bei deinem Schwafeln zuhört, aber selbst DU könntest ja jetzt auch mal kapiert haben, dass beim TE kein Licht brennt.

#7884712
Lesenswert?

Hallo Günter, um zu lernen, wie man ein System programmiert, ist es am einfachsten, bestehenden Code zu nehmen und schrittweise Änderungen daran vorzunehmen.

Hier mal ein Programm, dass den Timer benutzt und bis 3 zählt. Als Übung kannst du die Zahlenausgabe ändern oder den Sprung so ändern, dass das Zählen wiederholt wird.

1
; Junior Computer Siebensegmentansteuerung
2
; bis 3 zählen
3
;
4
; original version:
5
; 2025-05-32, mchris
6
;
7
; 7 segement codes
8

9
Z0 = $C0
10
Z1 = $F9
11
Z2 = $A4
12
Z3 = $B0
13
Z4 = $99
14
Z5 = $92
15
Z6 = $82
16
Z7 = $F8
17
Z8 = $80
18
Z9 = $90
19

20
    .org $300   ; Startaddresse für den Assemblercode
21

22
    lda #$ff
23
    sta PBDD    ; PORT B alles auf Ausgang
24
    sta PADD    ; PORT A alles auf Ausgang
25
    lda #8      ; Adresse 8 für erstes Display
26
    sta PBD     ; erstes Digit auswählen
27

28
    lda #Z1    ; Zahl 1
29
    jsr show
30

31
    lda #Z2    ; Zahl 2
32
    jsr show
33

34
    lda #Z3    ; Zahl 3
35
    jsr show
36

37
end:
38
    jmp end
39

40
show:
41
    sta PAD     ; Segmente schreiben
42

43
    jsr wait
44
    jsr wait
45
    rts
46

47
wait:
48
    lda #255
49
    sta TIMER_DIV1024 ; start timer mit prescaler => ~2Hz
50
wait1:
51
    lda TIMER_READ
52
    bne wait1 ; Warte, bis timer 0
53
    rts
54

55
    ; MOS6532 PIA addrese $1A80
56
PAD=$1A80
57
PADD=$1A81
58
PBD=$1A82
59
PBDD=$1A83
60
TIMER_READ=$1A84 ; timer read register
61
TIMER_DIV1024=$1A97 ; address to start timer prescaler 1024 and no Interrupt
OP #7884802
Lesenswert?

Cyblord -. schrieb:

Ist dir klar dass der TE sich absolut gar nichts aus deinen kleinen Aufgaben macht, ja sie nicht mal wahrnimmt?

Halloo, einen schönen Sonntag, liebe Leute, :-))

Ja das Progrämmchen, konnte ich gar nicht wahrnehmen; ich war gar nicht zu Hause. Ich war ja auf einer Geburtstagfeier.

Jetzt wird erst mal gut gefrühstückt, dann hole ich das Labornetzgerät nach hier und den kleinen Junior. Dann gebe ich die Hex-Zeichen ein; das sieht wirklich interessant aus. :-)

Die folgenden E-Mails muss ich erst noch lesen. DANKSCHÖN für Eure Beiträge! Mit lieben Grüßen Günter K. (ENK)

#7884804
Lesenswert?

Günter K. schrieb:

Dann gebe ich die Hex-Zeichen ein; das sieht wirklich interessant aus.

Es ging ja eher darum zu VERSTEHEN was dieses Programm tut und warum.

Denn es nutzt diesmal deinen heiß geliebten TIMER. Das wäre die Gelegenheit für dich zu verstehen wie der funktioniert.

Vom HEX Zeichen eintippen hat man genau gar nichts. Es bringt einen nicht weiter.

Und deshalb sind die ganzen Programme und Aufgaben hier komplett für die Tonne weil DU sowieso niemals nicht auch nur versuchen würdest zu kapieren was diese Programme tun.

Der Christoph ist ein bisschen langsamer als der Rest hier und braucht deshalb ein paar Tage länger um das zu verstehen. Aber es wird kommen.

#7884829
Lesenswert?

Hallo, Cyblord -. schrieb im Beitrag #7884804:

Der Christoph ist ein bisschen langsamer als der Rest hier und braucht deshalb ein paar Tage länger um das zu verstehen.

Es ist schon interessant zu lesen wie dich diese Diskussion triggert und du auch wirklich jeden, der etwas Konstruktives beträgt, in deiner typisch überheblich, arroganten Art und Weise angehst.

rhf

#7884837
Lesenswert?

Günter K. (enk) 31.05.2025 13:13

Das Programm, welches ich schreiben werde heißt: Martinshorn.(asm) Allerdings leider nur, vorläufig NUR wie gewohnt in Maschinensprache mit beigefügten MNEMONICS.

Vielleicht wäre auch der typische Alarmton, wie man ihn bisweilen bei verschiedenen Autos hört, ein Versuch wert:

1
; Junior Computer Alarmton
2
;
3
; original version:
4
; 2025-05-31, mchris
5

6
; Programmstart
7
    .org $300    ; Startaddresse für den Assemblercode
8

9
    lda #$1      ; Lautsprecher an PORT B0 anschließen
10
    sta PBDD     ; PB0 als Ausgang setzen
11
    
12
loop:
13
    ldx #$FF    ; Ton bestimmende Konstante
14
    jsr chirp
15
    jmp loop
16

17
chirp:
18
    txa         ; x in Akku kopieren
19
    tay         ; Akku nach x kopieren
20

21
delay:
22
    dey         ; y runterzählen
23
    bne delay   ; wenn nicht Null wiederholen
24

25
    lda PBD     ; Lautsprecher lesen
26
    eor #1      ; Bit rumdrehen
27
    sta PBD     ; Lautsprecher schreiben
28

29
    dex         ; Frequenz erhöhen (Chirp-Effekt)
30
    bne chirp   ; Wiederholen, bis x = 0
31
    rts
32

33
; MOS6532 PIA Adressen
34
PBD  = $1A82
35
PBDD = $1A83

Hier noch der HEX-Code zum eintippen:

1
0300: A9 01 8D 83 1A A2 FF 20
2
0308: 0D 03 4C 05 03 8A A8 88
3
0310: D0 FD AD 82 1A 49 01 8D
4
0318: 82 1A CA D0 F0 60

Und nicht vergessen: Der Lautsprecher muss hier an Bit0 von PortB angeschlossen werden.

#7884873
Lesenswert?

Roland F. schrieb:

Es ist schon interessant zu lesen wie dich diese Diskussion triggert und du auch wirklich jeden, der etwas Konstruktives beträgt, in deiner typisch überheblich, arroganten Art und Weise angehst.

Naja, allerdings ist in seinen Aussagen schon ein Fünkchen Wahrheit. Über die Art und Weise wie sie vorgetragen werden kann man halt streiten. Man könnte es ganz gewiß auch anders formulieren. Der Günter scheint mir schon ein bischen beratungsresistent zu sein. Es haben hier ihm schon einige gesagt, daß seine Vorgehensweise wohl nicht die ganz Richtige ist, um es mal vorsichtig auszudrücken. Am Ende ist jeder seines eigenen Glückes Schmied.

OP #7884895
Lesenswert?

Christoph M. schrieb:

aber jetzt: 0300: A9 FF 8D 83 1A 8D 81 1A 0308: A9 B0 8D 80 1A A9 08 8D 0310: 82 1A 4C 12 03

Hallo Christoph M.

dass man sich da vertuen kann, das ist normal, wir sind Menschen. Und genau darum, möchte ich die Beziehung zur Maschine behalten. Ich stelle das jetzt mal 'n bisschen anders dar, und danach, noch was anders. (Auch wenn es stupide erscheint.)

1
     8  9  A  B   C  D  E  F
2
     0  1  2  3   4  5  6  7

0300: A9 FF 8D 83 1A 8D 81 1A 0308: A9 B0 8D 80 1A A9 08 8D 0310: 82 1A 4C 12 03

1
     0  1  2  3   4  5  6  7
2
     8  9  A  B   C  D  E  F

Ich hatte auch schon mal Hexdumps gesehen, die die Zählung bis F hintereinander geführt. - Jedoch, das soll kein meckern von mir sein. Darum mache ich das jetzt so, wie Hans Otten. Also von 0300 bis 031C: Nun Kopiere ich die Adressen ab 0301 neu dazu. Aber ohne die Kopie zu zerstören. Das ist jetzt ein neues Experiment, denn (das klappte noch nicht.) Sondern nur auf dem Editor (die Liste kommt.) Bei dem Editor muss man zuerst den Cursor setzen, sonst überschreibt er. Die entstandenen Doppelkopien werden gelöscht. - Nun wird es aber kompliziert, bis ich selbst ein Assembler geschrieben habe, bis man auf diesem Wege den einfachen 6502-Computer verstanden hat. Wenn er erweitert ist, kriegt er einen 48 x 64 Zeichen-Bildschirm(3x4) und eine große Tastatur. So klein das Hexdamp auch aussieht, als Liste doch zu groß. Es kommt in den nächsten Beitrag, und in Exel. Ich kann es erst verstehen, wenn ich weiß was der Rechner macht. Nochmal DANKSCHÖN für Eure Beiträge! Mit lieben Grüßen Günter K. (ENK) Fortsetzung folgt,

OP #7884907
Lesenswert?

Christoph M. schrieb:

Vielleicht wäre auch der typische Alarmton, wie man ihn bisweilen bei verschiedenen Autos hört, ein Versuch wert: ; Junior Computer Alarmton

Ja, hallo, auch das ist gut, dann kommt als 2. der gleiche Ton. Denn es geht ja ums Prinzip. An Stelle des Timers mache ich was anderes, und ich frage mich wirklich, wie Falk das schreibt, ob der Klaus das kann.

Jetzt muss ich Mittag zubereiten, bis später. Liebe Grüße Günter K. (ENK)

OP #7884920
Lesenswert?

Hallo Cyblord,

Cyblord -. schrieb:

Woher soll ich wissen was ich denke bevor ich höre was ich sage?

Ja, das kann ich Dir auch nicht sagen. - Bitte nicht so.

Hallo Klaus,

Cyblord -. schrieb im Beitrag #7884892: dass Klaus schrieb,

DEINE Beiträge helfen dagegen tatsächlich niemandem

Also Klaus, gehe bitte nicht von Voraussetzungen aus, - die Du nicht kennst. Liebe Grüße Günter K. ENK

OP #7884940
Lesenswert?

Ihr Lieben, an alle und Cyblord -. schrieb im Beitrag #7884804:

Vom HEX Zeichen eintippen hat man genau gar nichts. Es bringt einen nicht weiter.

Hallo Cyblord,

  1. geht es z.Z. noch gar nicht anders,
  2. habe ich die Beziehung zum Op-Code,
  3. wobei ich wissen muss, dass der auf einem anderen System ganz anders ist.
  4. so, läuft der Prozess ab.

Hallo Christoph M. Christoph M. schrieb im Beitrag #7884837:

von

1
    Christoph M.
2
    (mchris)
3
  01.06.2025 11:30

Deine Beiträge sind gut!

Leider kann ich sie noch nicht vom PC zun JC übertragen. Es ist in der Planung, aber dann ist es nicht mehr der 6502 sondern ein 8086; eine Peripherie und eine Verbindungsleitung. Leider habe ich keinen Lautsprecher parat. Habe aber einen Kleinen gekauft, Verstärkerchen dazu; das muss ich aber erst löten.

Und natürlich habe ich eine Idee 2 Töne mit dem Lautsprecher zu machen. "Tuut - Tuut" mit Pause, ohne Timer. Ja, das geht. Wenn Du es nicht schon eingegeben hast. Es gibt die Möglichkeit, die Laufzeit des Tones zu ermitteln. Ob man dabei einen 2. anderen Ton spielt keine Rolle.

Jetzt muss ich Mittag essen, und baue die Sachen an einen andern Ort auf. Dabei mus ich ausschalten, und den Code neu eingeben. Liebe Grüße Günter K. (ENK)

#7884969
Lesenswert?

Hallo, Cyblord -. schrieb im Beitrag #7884880:

Kapierst du das denn noch immer nicht?

Wenn du andere Beiträge von mir gelesen hättest, wüsstest du das ich sehr wohl "kapiert" habe das Günter wohl nicht zum Ziel kommen wird. Es ging mir in meinem Beitrag an dich auch gar nicht um Günter, sondern eher um dich und wie du hier Leute herunterputzt, die immer noch versuchen Günter zu helfen.

rhf

OP #7885066
Lesenswert?

Roland F. schrieb:

Es ging mir in meinem Beitrag an dich auch gar nicht um Günter, sondern eher um dich und wie du hier Leute herunterputzt, die immer noch versuchen Günter zu helfen.

Günter K.(ENK) schreibt DANKESCHÖN! Und ich weiß und sehe, dass Deine Sätze gut gemeint sind.

Roland F. schrieb:

sehr wohl "kapiert" habe das Günter wohl nicht zum Ziel kommen wird.

Hallo Roland F., "... Günter wohl nicht zum Ziel kommen wird." - Wieso? Natürlich lieber Roland F. ich habe das -Ziel- vor Augen, - bin aber eher Maschinenorientiert, wovon mir allerdings, auch noch 'ne Ecke von fehlt. Die Maschinenorientierung ist wichtig! Darum, weil wir Menschen sind, und acht geben müssen, damit die Maschine nichts tut, was wir nicht überschauen können. Aus diesem Grunde gehört der OP-Code (also Maschinen-Code), fest zum Assembler-Code, mit seinem Assembler durch den Compiler dazu, so dass, sogar der Kommentar und (zuvor dem wenn nötig auch die Zeiten) mitgenommen werden. Wie z.B.: "2 x Hupen" Wenn der Timer nicht benutzt wird, ist das interessant. Beispiele mit Zeiten von Euch, sah ich ja auch schon. So, dass das -Ziel-, dass ein Computer der leichter zu verstehen bleibt.

Wenn jemand so in etwa schreibt: "... haufenweise Fachbegriffe rausboxt..." zu dem sage ich jetzt einfach: Das ist Terminologie.

Fairerweise, schrieb jemand mit einem Bild dazu Harald K. schrieb:

und da das nur über Opcodes geht ...

Denk dran:

Das hier https://www.mikrocontroller.net/attachment/662153/junior3_04.jpg ist der Computer, mit dem Günter unterwegs ist.

(Zwichendurch denke ich an einen Satentransfer zu einem passenden PC. dieser hier kann das noch nicht.) DANKESCHÖN!! Liebe Grüße Günter K. (ENK) und das sende ich auch jetzt hier.

Gast #7885100
Lesenswert?

Hans schrieb:

Naja, allerdings ist in seinen Aussagen schon ein Fünkchen Wahrheit.

Das ist KEIN Qualitätsmerkmal, denn das trifft auf fast jede auch noch so bescheuerte Aussage zu. Mit gutem Willen findet man immer das berühmte Fünkchen Wahrheit...

Über die Art und Weise wie sie vorgetragen werden kann man halt streiten.

Mit Verlaub: Nein.

Es gibt Menschen, die permanent andere erniedrigen, um sich selbst zu erhöhen. Darüber gibt es m.E. nix zu streiten -- das ignoriert man konsequent, wenn man klug ist.

Der Günter scheint mir schon ein bischen beratungsresistent zu sein.

Ach echt?!

Und das trifft auf die Meinungsführer im Forum, die auch die Frage "Ich habe Probleme mit meiner Freundin im Bett..." mit der herausgeplatzen Empfehlung: "Nimm einen Mikrocontroller!" beantworten würden, wohl nicht zu?

Nein, nein, der alte Spruch gilt immer noch: Sachkunde ist einer lebhaften Diskussion nur abträglich...

Sachkunde ist aber nicht (nur) der nerdige Technikerblick mit Scheuklappen, sondern auch echtes Verständnis für die Situation (den Wissensstand, die Fähigkeiten) des Gegenüber. Nur mal ganz nebenbei.

Am Ende ist jeder seines eigenen Glückes Schmied.

Und warum regt ihr euch dann so auf? Handelt doch einfach danach und lasst ihn doch.

Gast #7885103
Lesenswert?

Klaus schrieb:

Cyblord -. schrieb:

Ist dir klar dass der TE sich absolut gar nichts aus deinen kleinen Aufgaben macht, ja sie nicht mal wahrnimmt?

Ist dir klar, dass wir uns absolut gar nichts aus deinen ständigen Stänkereien machen, weil der Cyblord halt mal so ist wie er ist?

Leider stimmt das nicht.

Wenn Dir die Stänkerein wirklich egal wären, würdest Du ihm nicht anworten.

#7885195
Lesenswert?

Christoph M. schrieb:

aber jetzt:
0300: A9 FF 8D 83 1A 8D 81 1A
0308: A9 B0 8D 80 1A A9 08 8D
0310: 82 1A 4C 12 03

Günter K. (enk) 01.06.2025 13:27

Ich hatte auch schon mal Hexdumps gesehen, die die Zählung bis F hintereinander geführt. - Jedoch, das soll kein meckern von mir sein.

Oft ist es tatsächlich so, dass pro Zeile 16 Byte verwendet werden ( Zählung 0-F ). Für so ein kleines System wie den Junior Computer finde ich 8 Bytes pro Zeile aber deutlich übersichtlicher.

befor ich die Liste schicke, eine Frage: Was kann ich jetzt mit dem geladenen Programm tun? Ich habe es eingetippt.

Du musst die Startadresse eintippen und dann 'go' drücken.
Am besten schaust du dir das Video ab Minute 26:20 hier an:

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

Was das Programm tut ist hier beschrieben:

Beitrag "Re: Einfache CPU, einfacher Rechner, nur zum Lernen, Erfahrung?"

Dort findest du auch die Übungsaufgabe.
Du kannst das Programm selbst von Hand nach deinem Excel-Prinzip neu übersetzen und z.B. die Zahl ändern.

#7885275
Lesenswert?

Hippelhaxe schrieb:

Sachkunde ist aber nicht (nur) der nerdige Technikerblick mit Scheuklappen, sondern auch echtes Verständnis für die Situation (den Wissensstand, die Fähigkeiten) des Gegenüber. Nur mal ganz nebenbei.

Dann nutze das doch und helfe dem TE entsprechend seinen Fähigkeiten. Was hält dich ab?

Der Günter scheint mir schon ein bischen beratungsresistent zu sein.

Ach echt?!

Und das trifft auf die Meinungsführer im Forum

Oder hört es bei dir beim whataboutism schon auf?

#7885490
Lesenswert?

Günter K. (enk) 31.05.2025 13:13

Das Programm, welches ich schreiben werde heißt: Martinshorn.(asm) Allerdings leider nur, vorläufig NUR wie gewohnt in Maschinensprache mit beigefügten MNEMONICS.

Hier habe ich Dir mal eines als Vorlage gemacht.
Dieses mal habe ich als Grundlage das DDS-Verfahren verwendet, um mal was anderes zu machen. Dieses Verfahren war in den 80ern soweit ich weiß noch nicht so stark verbreitet.

https://de.wikipedia.org/wiki/Direct_Digital_Synthesis

1
; DDS Martinshorn
2
;
3
; https://de.wikipedia.org/wiki/Folgetonhorn
4
; In Deutschland wird die Ausführung des Folgetonhorns 
5
; durch DIN 14610 geregelt. Die Tonhöhe von verschiedenen 
6
; Hörnern darf sich unterscheiden, muss aber zwischen 360 
7
; Hz (ca. fis′) und 630 Hz (ca. dis″) liegen. 
8
; Das Tonintervall muss eine reine Quarte sein 
9
; (beispielsweise: a′ und d″) => Frequenzverhältnis 4:3
10
;
11
; 2025-05-02 mchris
12

13
; MOS6532 PIA Addresses
14
PBD  = $1A82
15
PBDD = $1A83
16

17
freq1 = 440  
18
freq2 = freq1*4/3  ;
19

20
; 16390 = 1second => fs = 16390
21
duration = 12130 ; 0.74 secons
22

23
.code
24
.org $300
25

26
    lda #$01
27
    sta PBDD     ; Set PB0 (connected to speaker) to output
28

29
loop:
30
    lda #<freq1
31
    sta frequency
32
    lda #>freq1
33
    sta frequency+1
34

35
    jsr tone
36

37
    lda #<freq2
38
    sta frequency
39
    lda #>freq2
40
    sta frequency+1
41

42
    jsr tone
43

44
    jmp loop
45
    ; *******************************************************
46
    ; tone:
47
    ;  inputs
48
    ;  - frequency (16bit)
49
    ;  - duration (16bit) 16390 = 1 sec
50
    ; *******************************************************
51
tone:
52
    ; dphase=frequency*2
53
    LDA frequency+1
54
    STA dphase+1
55

56
    LDA frequency
57
    STA dphase
58

59
    asl dphase
60
    rol dphase+1
61

62
    asl dphase
63
    rol dphase+1
64

65
    ; duration = sample count
66
    ldx #<duration ; low
67
    ldy #>duration ; high
68
    iny
69
toneloop:
70
    ; loop calibration delay
71
    nop
72
    nop
73
    nop
74
    nop
75
    nop
76
    nop
77
    nop
78
    nop
79

80
    ; Add dphase to phase (16-bit add)
81
    lda phase
82
    clc
83
    adc dphase
84
    sta phase
85

86
    lda phase+1
87
    adc dphase+1
88
    sta phase+1
89

90
    ; Use ROL to move bit 7 of phase+1 into bit 0 (speaker control)
91
    lda phase+1
92
    rol         ; Rotate left through carry
93
    rol
94

95
    and #$01     ; Keep only the lowest bit
96
    sta PBD      ; Output to speaker
97

98
    dex
99
    bne toneloop
100
    dey
101
    bne toneloop
102

103
    rts          ; Otherwise, return
104

105
; Variables
106
frequency:  .res 2
107
phase:      .res 2
108
dphase:     .res 2

und hier wie immer der Code zum Eintippen:

1
0300: A9 01 8D 83 1A A9 B8 8D
2
0308: 6B 03 A9 01 8D 6C 03 20
3
0310: 22 03 A9 4A 8D 6B 03 A9
4
0318: 02 8D 6C 03 20 22 03 4C
5
0320: 05 03 AD 6C 03 8D 70 03
6
0328: AD 6B 03 8D 6F 03 0E 6F
7
0330: 03 2E 70 03 0E 6F 03 2E
8
0338: 70 03 A2 62 A0 2F C8 EA
9
0340: EA EA EA EA EA EA EA AD
10
0348: 6D 03 18 6D 6F 03 8D 6D
11
0350: 03 AD 6E 03 6D 70 03 8D
12
0358: 6E 03 AD 6E 03 2A 2A 29
13
0360: 01 8D 82 1A CA D0 D8 88
14
0368: D0 D5 60 00 00 00 00 00
15
0370: 00
Angehängte Dateien:
OP #7885682
Lesenswert?

MChris: Martinshorn! - Oh, nun ist mein alter Text weg! Ich hatte Text eingetippt, nach dem hören Deines Martinshorns war ich So. -begeistert-! -, dass mein Text verloren ging. Jetzt schreibe ich vorher in WORD. Cyblord -. schrieb im Beitrag #7885495:

Christoph M. schrieb:

Hier habe ich Dir mal eines als Vorlage gemacht.

DIESMAL wird er es sich anschauen. Ganz sicher!

Ja, DIESESMAL werde ich es mir anschauen. Ganz sicher! Ich bin dabei. … … Sehr gut, fand ich Deinen Vorschlag und auch von Thomas W im Beitrag #7883683:

… und Christoph M. schrieb:

Man könnte z.B. die Ports so beschreiben, dass das erste Siebensegment-Display eine '8' anzeigt. Weiß jemand, wie man das macht?>

Ja. Ich. Im Anhang findest Du den IO-Teil des Juniors. Das Display ist gemultiplexed und PB1-PB4 … PA0-PA6 … - waehlen die Stelle des Displays aus, PA0-PA6 waehlen … updaten. Die Beschreibung findest Du im Elektor-Junior Buch II, p. 131. Die Routinen SHOW und CONVD findest Du auch erklaert. Und die Beschreibung ist sogar recht gut, selbst ich habe das damals als 16-Jaehriger verstanden.

Günter sagt: Mit 16 war ich wie ein 12-Järiger.

Fuer Guenter ist das nix, … die Ton-Erzeugung ab p.45 im gleichen Buch bekommt er ja auch nicht hin. ---- P.S.: Das war ein wenig falsch oder vereinfacht: Man kann mit Auswahl von Pb1-4 eine Stelle auswaehlen und dann ein Pattern auf dieser Stelle anzeigen. Aber: Es ist eigentlich fuer Multiplexing gerechnet, die 68Ohm-Widerstaende sind etwas zu klein, und die Stroeme in das Display etwas zu gross.

Günter sagt: Das verstehe ich zwar: - Multiplexing braucht weniger Strom; aber nicht das Ganze! - Was ich auch besonders gut von Euch finde ist nicht nur Eure LEISTUNG!! - Sondern, dass ich keine Meckereien sehe! Das ist: Sehr gut! Fortsetzung folgt.

OP #7885714
Lesenswert?

Fortsetzung, erstmal das hier:

1
     0  1  2  3   4  5  6  7   8  9   A  B   C  D  E  F

0300 A9 FF 8D 83 1A 8D 81 1A A9 B0 8D 80 1A A9 08 8D 0310: 82 1A 4C 12 03

1
     0  1  2  3   4.  Man hat sich ja so, leicht vertan!

Ich fragte, in etwa: "Was soll ich da machen?" Thomas W. schrieb im Beitrag #7884921:

von Thomas W. (datenreisender) antwortete: Siehe oben.

DANKE für EURE Aufmerksamkeit! Was ich sonst noch in dem Zusammenhang tat, sage ich jetzt schon mal:
1.: Ich versuchte die Speicher-ICs: NEC ROY 218-045 IRLAND µPD2114LC zu kaufen. Ich konnte sie nicht bekommen.

2.: Teile für den Aktiv-Lautsprecher.

Mal sehen was passiert wenn ich das eingebe, siehe oben. Ob ich das (siehe oben) verstehen werde, weiß ich jetzt noch nicht. Mit lieben Grüßen Günter K. (ENK)

Nachtrag: Ich gebe in den PC den OP-CODE ein, dann die MNEMONICS, dann suche ich die vermuteten MARKS raus danach die LABELS; wenn mir auch danach, etwas für den REM einfällt, trage ich auch diese ein und schaue in Deinem Assembler-Programm nach ob da auch noch etwas steht. Falls die LEDs zu hell sind, Oder der Strom über 0,7 A geht, drücke ich RESET.

OP #7885758
Lesenswert?

Thomas W. schrieb:

Es ist auch ganz gross in Kapitel 3 ("Programmieren") auf p.57 des Junior-Computer Buch I erklaert.

Wer sagt, dass ich das nicht können soll? Wolfgang R. hat mir doch so ein ähnliches Programm geschickt, und es hatte funktioniert. - Ob ich es als ein Ganzes verstanden habe, ist eine andere Sache. - Immerhin weiß ich, das die BITs für die Segmente invertiert werden müssen.

Wenn man aus einer 3 eine 4 machen will, geht das wie bei einem Streichholz-Rätsel. Es kommt daraf an, wie die 8 Bit, zugordnet sind. Auch wenn das sonst üblich anders ist, muss ich vorher wissen, wie die Anschlüsse liegen, Soetwas lerne ich mir nicht auswendig, es sei denn,

  • man hält sich an diese Norm; dann auch nicht unbedingt, es sei denn als Vorschrift. __
    |__ || | , | nun könnte ich die Bit-Nummern dabeischreiben,

das tue ich aber nicht. Mit lieben Grüßen Günter K. (ENK)

OP #7885762
Lesenswert?

Thomas W. schrieb:

Es ist auch ganz gross in Kapitel 3 ("Programmieren") auf p.57 des Junior-Computer Buch I erklaert.

Wer sagt, dass ich das nicht können soll? Wolfgang R. hat mir doch so ein ähnliches Programm geschickt, und es hatte funktioniert. - Ob ich es als ein Ganzes verstanden habe, ist eine andere Sache. - Immerhin weiß ich, das die BITs für die Segmente invertiert werden müssen.

Wenn man aus einer 3 eine 4 machen will, geht das wie bei einem Streichholz-Rätsel. Es kommt daraf an, wie die 8 Bit, zugordnet sind. Auch wenn das sonst üblich anders ist, muss ich vorher wissen, wie die Anschlüsse liegen, Soetwas lerne ich mir nicht auswendig, es sei denn,

  • man hält sich an diese Norm; dann auch nicht unbedingt, es sei denn als Vorschrift. __
    |__ || | , | nun könnte ich die Bit-Nummern dabeischreiben,

das tue ich aber nicht. Mit lieben Grüßen Günter K. (ENK)

Klaus schrieb:

Günter K. schrieb:

Nachher kaufe ich noch weitere 7 Schälterchen

Sag mal, willst Du uns eigentlich verarschen? Liest Du nicht was wir schreiben? Du schaffst es nicht, 2 Töne hintereinander abzuspielen, willst aber nun wieder 15 Schritte weiter gehen? Nochmal für dich ganz klar:

DU SCHAFFST DAS NICHT.

OP #7885766
Lesenswert?

Günter K. schrieb:

Klaus schrieb:

Günter K. schrieb:

Nachher kaufe ich noch weitere 7 Schälterchen

Sag mal, willst Du uns eigentlich verarschen? Liest Du nicht was wir schreiben? Du schaffst es nicht, 2 Töne hintereinander abzuspielen, willst aber nun wieder 15 Schritte weiter gehen? Nochmal für dich ganz klar:

DU SCHAFFST DAS NICHT.

Falk B. schrieb:

Klaus schrieb:

DU SCHAFFST DAS NICHT.

Du auch nicht.

Beitrag "Re: Einfache CPU, einfacher Rechner, nur zum Lernen, Erfahrung?"

Mit lieben Grüßen Günter K. (ENK)

OP #7885774
Lesenswert?

Ihr Lieben, an alle.

Günter K. schrieb im Beitrag #7885766: von Klaus (feelfree) 03.06.2025 00:28

Klaus schrieb:

Günter K. schrieb:

Nachher kaufe ich noch weitere 7 Schälterchen

Sag mal, willst Du uns eigentlich verarschen? Liest Du nicht was wir schreiben? Du schaffst es nicht,

Du schaffst es nicht, 2 Töne hintereinander abzuspielen, willst aber nun wieder 15 Schritte weiter gehen? Nochmal für dich ganz klar:

DU SCHAFFST DAS NICHT.

Bei den 2 Tönen, muss ich die Zeiten einhalten; bei mehreren Schaltern, kann ich die Zeit selber bestimmen.

Und was meinst Du mit "uns"? - Wen willst Du "mit" einbeziehen? Meinst Du Dich selber? Mit lieben Grüßen Günter K. (ENK)

#7885775
Lesenswert?

Günter K. schrieb:

bei mehreren Schaltern, kann ich die Zeit selber bestimmen.

Und, hast du auch schon eine Idee mit welchen Befehlen du die Taster abfrägst? An welchen Portpins die Tasten angeschlossen werden? Wie du in deinem Programm die Zuordnung von Taste zu Tonhöhe bewerkstelligst?

Nein? Egal, Christoph wird dir den Hexcode liefern, und bis Weihnachten schaffst du es auch ihn fehlerfrei einzutippen.

OP #7885780
Lesenswert?

Ihr Lieben,

Klaus (feelfree) schrieb:

Und, hast du auch schon eine Idee mit welchen Befehlen du die Taster abfrägst?

Und Günter K. antwortet: Hallo Klaus (feelfree) Zu Deiner Frage sage ich: Ja.

An welchen Portpins die Tasten angeschlossen werden?

Antwort: Ja.

Wie du in deinem Programm die Zuordnung von Taste zu Tonhöhe bewerkstelligst?

Du meinst: "Wie Du in Deinem Programm, die Zuordnung zur Tonhöhe bewerkstelligst? Antwort: Ja.

Nein? Egal, Christoph wird dir den Hexcode liefern, und bis Weihnachten schaffst du es auch ihn fehlerfrei einzutippen.

Hallo Klaus (feelfree) Hoffendlich - ? - -Moment- bitte, :-)

Hallo Christoph M., Bitte schreibe mir noch kein Programm, - dass Du das kannst, glaube ich sowieso. Ein solches Programm werde ich alleine schreiben. Natürlich muss ich noch sehr viel lernen das ist klar. Bin auch nicht sicher, obs mir gelingt, aber ich versuche es.

Wie ich mich erinnere, hatte ich das Programm von p.57 so in etwa abgetippt, - das richtige Ergebnis war da; natürlich versuche ich auch es zu verstehen, warum das so ist. Solche Artikel werde ich öfter lesen. Gute Nacht liebe Leute mit lieben Grüßen Günter K.

OP #7885987
Lesenswert?

Textberichtigung für richtige Farben der richtigen Zuordnung, ich hatte diese nicht vertauscht. Das Folgende passte nicht in den Kontext vom 03.06.2025 00:28

Günter K. schrieb:

Falk B. schrieb:

Klaus schrieb:

DU SCHAFFST DAS NICHT.

Du auch nicht.

Beitrag "Re: Einfache CPU, einfacher Rechner, nur zum Lernen, Erfahrung?"

Mit lieben Grüßen Günter K. (ENK)

Bis hier ist der noch stehene Text unveändert auf diesem Blatt.

Demnach vermute ich das Folgende anders:

Falk B. schrieb:

Klaus schrieb: DU SCHAFFST DAS NICHT. Günter schreibt: Das lese ich nun schon oft von Dir. Folglich muss Falk geschrieben haben: Du auch nicht.

Frage an Falk B., war das so? die folgende Zeile hatte keinen LINK hier.

Beitrag "Re: Einfache CPU, einfacher Rechner, nur zum Lernen, Erfahrung?" Mit lieben Grüßen Günter K. (ENK) PS:

Günter schreibt weiter: Klaus (feelfree) Wenn Du mich damit anspornen willst ist das gut, aber bitte höre auf damit, mir dem Mut rauben zu wollen!

#7885999
Lesenswert?

Günter K. schrieb:

Wenn Du mich damit anspornen willst ist das gut, aber bitte höre auf damit, mir dem Mut rauben zu wollen!

Anfangs wollte ich dich noch anspornen. Und dir helfen. Zum Beispiel mit diesem Beitrag:

Klaus schrieb:

Verändere/erweitere das Programm mit den 440Hz schrittweise:

  • dass es eine andere Tonhöhe abspielt
  • dass es den Ton z.B. nur eine bestimmte Zeit abspielt
  • dass es 2 verschiedene Töne hintereinander abspielt

Damit wirst Du ein paar Tage beschäftigt sein. Dann kommt:

  • dass alle Tonhöhen einer Tonleiter abgespielt werden
  • dass alle Noten unabhängig von der Höhe ca. gleich lang abgespielt werden

Wieder ein paar Tage bis Wochen.

NICHTS davon hast Du in den letzten 2 Wochen gemacht. Stattdessen bestellst Du RAMs, Taster und sonstiges Gedöns mit dem Du absolut nichts anfangen wirst.

Wenn Du so weitermachst, kommst Du nicht nur nie zum Ziel, sondern nie auch nur einen Millimeter weiter.

#7886024
Lesenswert?

Günter K. schrieb:

Aber auch einen passenden Emulator der CPU auf einen anderen Computer.

Da warst Du doch fast schon auf dem richtigen Weg, aber dann bist Du leider falsch abgebogen. Emulatoren hat man früher mal benutzt, wo die Programme noch in PROM oder OTP gespeichert wurden. Heute benutzt man Simulatoren und Debugger.

Allen gemeinsam ist eine komfortable Umgebung, wo man die Programme bequem testen kann. Und damit kann man auch wirklich lernen, was eine CPU bis ins kleinste Detail intern macht. Ob Akku, Flags, Register, Stack, Codesegment, Datensegment, Timer, UART, IO-Pins, alles hat man jederzeit bequem im Blick. Und Laufzeiten (CPU-Zyklen) von Programmteilen kann man sich natürlich auch anzeigen lassen.

Dein Spielzeug mit den Tasten und 7-Segment Anzeigen erlaubt dagegen nur einen winzigen Blick durchs Schlüsselloch. Der Großteil läuft im Verborgenen ab. Da würden selbst junge Leute, die noch viel mehr flinke Neuronen als unsereiner haben, bald das Handtuch werfen. Zumindest würde sie schnell die Unsinnigkeit einsehen und sich einfach passendere Umgebungen aus dem Internet laden.

#7886032
Lesenswert?

Günter K. schrieb:

Textberichtigung für richtige Farben der richtigen Zuordnung, ich hatte diese nicht vertauscht. Das Folgende passte nicht in den Kontext vom 03.06.2025 00:28

Biting my tongue... biting my tongue...

Ich hab's mir vor einigen Tagen geschworen und hier kundgetan: ich werde diesen Thread nicht mehr kommentieren. Aber es fällt verdammt schwer. Der natürliche Masochismus treibt mich allerdings immer wieder dazu, Updates in diesem Thread zu verfolgen - und es zeigt schon Wirkung: mittlerweile schaue ich mir auch Heidi Klum's "Germany's next top model" mit Wonne an ;-)

#7886104
Lesenswert?

Peter D. schrieb:

Allen gemeinsam ist eine komfortable Umgebung, wo man die Programme bequem testen kann. Und damit kann man auch wirklich lernen, was eine CPU bis ins kleinste Detail intern macht.

Ich habe gerade mal getestet, wie lange es dauert, ein allererstes Programm auf einer virtuellen 6502 zu schreiben, zu assemblieren und zu starten:

Man gehe auf https://www.masswerk.at/6502/assembler.html und gebe in das src Fenster links oben folgenden Code ein:

1
      ldx #10
2
loop:
3
      dex
4
      bne loop

Dann drücke man auf die Schaltflache "assemble", anschließend auf "Show in emulator", und dann kann man per "Single Step" Zeile für Zeile durch das Programm schreiten und dabei beobachten, was die Register und Flags so machen. Also das was Günter eigentlich verstehen will, was eine CPU wie die 6502 so macht.

Das Ganze hat deutlich unter einer Minute gedauert. Eine Änderung geht in weniger als 10 Sekunden.

Günter tippt aber lieber stundenlang Hex-Codes in seinen Junior ein, die er nicht versteht und wenn es nicht funktioniert hat er keine Chance rauszubekommen warum.

Kann man so machen. Wenn man sonst alles sinnlose schon gemacht hat in seinem langen Leben.

Gast #7886164
Lesenswert?

Günter K. schrieb:

Wie ich mich erinnere, hatte ich das Programm von p.57 so in etwa abgetippt, - das richtige Ergebnis war da; natürlich versuche ich auch es zu verstehen, warum das so ist. Solche Artikel werde ich öfter lesen.

Hattest Du das Prograemmchen eingetippert? Und hattest Du das Ergebnis 0x0a bekommen?

Gast #7886166
Lesenswert?

Peter D. schrieb:

Allen gemeinsam ist eine komfortable Umgebung, wo man die Programme bequem testen kann. Und damit kann man auch wirklich lernen, was eine CPU bis ins kleinste Detail intern macht.

Ich haette in den 80'er gemordet fuer einen In-circuit-Debugger (heute fuer einen 10'er)

Vor allen Dingen wo die 6502 extrem dokumentiert ist, bei der 6502 z.B. mit dem Assembler/Simulator bei masswerk.at, der Visuelle Simulator bei http://www.visual6502.org/, Buecher (einfach mal bei https://archive.org/search?query=6502 gucken, die haben mehr Buecher als ich).

Und zum Anfassen: https://monster6502.com/

Und eine Sache muss man auch sehen: Wenn man Technologie der Disco-Zeit verwenden will, muss man auch Werkzeuge der Disco-Zeit benutzen. Und das ist manchmal sehr sehr muehsam.

Ich habe ein paar Vaxes hier zu stehen, betreiben ist bei den aktuellen Strompreis keine richtige Option mehr. Der C-Compiler (Stand: 1990) ist natuerlich alt, Fortran 77 ist das hoechste der Gefuehle. Die Entwicklungssystem waren 1990 toll, heute inakzeptabel antik. Das groesste Problem ist aber dass das Fachwissen ausstirbt (im woertlichen Sinn).

OP #7886205
Lesenswert?

Peter D. schrieb:

Ob Akku, Flags, Register, Stack, Codesegment, Datensegment, Timer, UART, IO-Pins, alles hat man jederzeit bequem im Blick. Und Laufzeiten (CPU-Zyklen) von Programmteilen kann man sich natürlich auch anzeigen lassen.

Peter D. schrieb:

erlaubt dagegen nur einen winzigen Blick durchs Schlüsselloch.

Ja, ich weiß wie das gemeint ist, also wirklich wenig.

Ja, ich habe letzten quasi einen 6510: "von innen gesehen", und den konnte man sogar, "in Betrieb" sehen; Natürlich nur chematisch (aber wie wirklich) auf dem Bidschirm. - Also was es da zu sehen gibt, ist viel zu viel. Viele, viele Transitoren und interne "Leiterbahnen" Pastel-Farben, latend farblich unterschieden. Ein großes Erlebnis, war das allemal! - Sogar die Anschlüsse konnte man ansprechen, nur verstehen kann man das nicht. Also ich könnte mir vorstellen, das ein hochinteligenter -nur- darauf, speziell seinen Doktor oder Professor macht. -

Ich selber aber, bin sogar unterschult, in gewisserweise aus Schiksalsgründen. - Und dennoch, ich kann zwar kein Englisch oder viel zu wenig. Aber einige Fachwörter sind nun mal nötig. Es ist aber wichtig, was der Computer bzw. CPU und Controller macht.

Doch ich las: Thomas W. schrieb im Beitrag #7886166:

Das groesste Problem ist aber dass das Fachwissen ausstirbt (im woertlichen Sinn). - Und das darf nicht passieren.

Wir brauchen überhaupt Leute, die, den Menschen überhaupt eine funktionsfähige Sprache für Menschen gibt. Das ist nicht verwirrt! - Aber eine solche Sprache, gibt es noch gar nicht, und auch keine Menschen, die uns das beibringen. -Aber für die Zukunft brauchen wir das!- Ich wiederhole: Es gibt keine Menschliche Sprache die funktionell funktioniert, außer die Programmiersprachen für Maschinen, wie Assembler und höhere Programmiersprachen. Wir Menschen sollten das aber auch für den Alltag bekommen. Und ich könnte mir vorstellen, das diese Menchen aus dem Informatik-Bereich kommen. Das ist gleichsam Philosophie, Wissenschalft, Religion u. Politik.

Vor kurzem (der letzten Zeit) wusste ich noch nicht mal, dass Assembler einen Compiler braucht. Programmier Hochsprachen sind mir dadurch zu hoch, weil sie so weit, von der Maschinen-Materie weg ist.

Ich bin nicht verwirrt,

auch wenn es durch meine Ausdrucksweise so erscheint. Übrigens der IBM 360/20 arbeitete schon stellenweise mit 64 BIT als interne 'Register'. Von mir hochgelobt ist der schon leider verstorbene Wolfgang Back und ebenso der Professor Joseph Weizenbaum! Er schrieb das Buch: Computermacht und Gesellschaft. Der PET hatte nur 8K; den hatte ich erweitert auf 32K usw.. Liebe Grüße Günter K. (ENK) PS.: Bitte helft mir, auf der untersten Ebene Maschinentechnisch am Ball (zu kommen und) bleiben.

OP #7886861
Lesenswert?

Thomas W. schrieb:

Ich habe ein paar Vaxes hier zu stehen, betreiben ist bei den aktuellen Strompreis keine richtige Option mehr. Der C-Compiler (Stand: 1990) ist natuerlich alt, Fortran 77 ist das hoechste der Gefuehle. Die Entwicklungssystem waren 1990 toll, heute inakzeptabel antik. Das groesste Problem ist aber dass das Fachwissen ausstirbt (im woertlichen Sinn).

Hallo Thomas W., hallo Leute, bitte was sind Vaxes? Mit lieben Grüßen Günter K. (ENK)

Gast #7886885
Lesenswert?

Günter K. schrieb:

Thomas W. schrieb:

Ich habe ein paar Vaxes hier zu stehen, betreiben ist bei den aktuellen Strompreis keine richtige Option mehr. [snip]

Hallo Thomas W., hallo Leute, bitte was sind Vaxes? Mit lieben Grüßen Günter K. (ENK)

https://blog.hnf.de/das-zeitalter-der-vax/

Am Ende des Beitrags sind die VaxStation 3100 und 4000 (unter dem Monitor), so etwas habe ich hier stehen. Eine MicroVax II (im Space-heater-Cabinet) habe ich auch noch.

Bitte keine Sinn-Frage.

OP #7886930
Lesenswert?

Thomas W. schrieb:

Hattest Du das Prograemmchen eingetippert? Und hattest Du das Ergebnis 0x0a bekommen?

(... glaube fast, mich an 0x0A zu erinnern, vielleicht anders modifiziert)

Hallo Thomas W. leider nein. Auf 0x00F3, also im Akku, habe ich: 0x42. Ich weiß aber, dass der Rechner richtig rechnet. In verschiedene Variationen vom Addiern, Subtrahieren, auch logisch über die ALU. Immer kam das richtige Ergebnis heraus; auch die dezimale Addition funktioniert.

Wenn ich die Speicherbausteine ausgetauscht habe, oder sonstige, probiere ich es nochmal aus. Es liegt nicht am Akku, denn in anderen Fällen stand dort das richtige Ergebnis.

Ich wollte doch, nochmal beantworten, Danke für Deine anderen Informationen. Mit lieben Grüßen Günter K. (ENK)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren