Im Moment wird gerade die Programmierung eines 6502 Computers
diskutiert.
In diesem Thread soll es ausschließlich um die Sounderzeugung mit einem
6502 gehen.
Der 6502 ist ein ziemlich historischer Mikroprozessor:
https://de.wikipedia.org/wiki/MOS_Technology_6502
Hier ein Codebeispiel die Ausgabe über einen Portpins am Juniorcomputer.
Ausprobieren kann man das auch auf einem PiPico:
Beitrag "6502 Emulator PiPico"
Wenn es Dir um Sounderzeugung aus der 6502er Zeit geht,
dann google doch mal nach 6581.
Edit:
Ich weiß, Du willst nur mit dem 6502 alleine - aber das macht keinen
Spaß wenn man mit ein wenig zusätzlicher Hardware viel bessere
Möglichkeiten schafft.
Sorry, Rechteckbeeps sind kein Sound.
Kein Wunder dass alte 8 bit Rechner spezielle Soundchips hatten.
Erst 68k (Mac) konnte 'real sound' wiedergeben.
Die Frage wäre, ob man mit hardwaregetimter Ausgabe eines Puffers (z.B.
15 kHz Zeilenfrequenz der Videoausgabe als Samplerate) und
softwareberechneter Füllung dieses Puffers wenigstens 8 bit Qualität
erreichen könnte auf einem 1MHz 6502.
Ich habe damals auf einem Original IBM PC (4.77MHz 8088) mit 4 bit
gesampelte Tonausgabe per PWM mit dem Hardwaretimer über den eingebaute
Lautsprecher geschafft. Als die Prozessoren schneller wurden habe ich
gemerkt, daß ich jeden zweiten angeforderten Sample nicht verarbeitet
hatte, die Tonausgabe lief dann doppelt so schnell.
kannst auch ne alte Soundkarte schlachten, so ein Yamaha YM3812 OPL2(9
Kanal) oder der Nachfolger YMF262 OPL3(18 Kanal) sind nochmal einige
Hausnummern besser als ein SID aus dem C64
Michael B. (laberkopp)
21.05.2025 10:13
>Sorry, Rechteckbeeps sind kein Sound.
Das könnte man so sehen. Allerdings wurden auch mit einem einfachen
Portpin in den 80er Jahren wesentlich komplexere Sounds als
Rechteckschwingungen erzeugt. Und genau darum geht es mir: Wie kann man
mit reduzierter, alter Hardware mit neuartigen Softwaremethoden neue
Sounds generieren.
Moin,
Ich denke mal, dass der Prozessortyp da eher zweitrangig ist. Also
erstmal ziemlich wurst, ob Z80, 6502, attiny oder sonstwer.
Wenn's drum gehen soll, durch Portpinwackeln ggf. mehr als nur ein
Rechteck zu erzeugen, ist die dafuer noetige Signalverarbeitung
(vermutlich wirds auf Sigmadeltamodulation rauslaufen) eher unabhaengig
von der CPU.
Und wenn ich dann halt mehr als 1 Bit Aufloesung haben will, aber nicht
mehr als 1 Bit Portpin spendieren will, muss ich halt entsprechend
zeitlich ueberabtasten (und ggf. einen Tiefpass hinter dem Portpin
spendieren). Ist auch unabhaengig von der CPU.
Laeuft also drauf raus, moeglichst viel von der digitalen
Signalverarbeitung moeglichst "vorher" machen zu lassen, dann in Sachen
"digitale Filter" auf low-End-CPUs kann man zwar schon das ein- oder
andere machen, aber so richtig dolle wirds keinesfalls.
Gruss
WK
Für den Apple (6502, 1-Bit-Sound) wurde schon damals in einer
Computerzeitschrift eine Software zur Sprachausgabe veröffentlicht. Die
klang natürlich sehr schlecht, aber deutlich besser als ich erwartet
hätte.
Yalu X. schrieb:> Für den Apple (6502, 1-Bit-Sound) wurde schon damals in einer> Computerzeitschrift eine Software zur Sprachausgabe veröffentlicht. Die> klang natürlich sehr schlecht, aber deutlich besser als ich erwartet> hätte.
Ungefähr so?
https://www.youtube.com/watch?v=8fgok9eHqO8&t=1680s
Michael B. schrieb:> Auf nem 1984 Mac
auch CAD auf dem MAC in der AtariST Emulation war toll, GEM sowieso, da
haben sich alle Compis bis win gut gehalten, seit dem Kacheldrama bei
win verstehe ich die Abkehr von GEM nicht alle Compis hatten das X zum
Fenster schliessen, Datei laden und speichern war immer an der selben
Stelle uvam.
PB0 ist am 6532 des Junior-Computers. Das ist ein PIO, oder auch RIOT
genannt. So, damit wäre dann schon mal klar dass es nicht um
Sounderzeugung rein mit dem 6502 geht. Denn kein I/O, keine Kekse ...
Allgemein kann man bei so was zuerst mal ins Bücherregal mit der
klassischen Literatur greifen: Rodney Zaks "6502 Anwendungen". Ich habe
gedruckt nur die deutsche Ausgabe von 1983 hier. Die englische von 1979
findet man auf https://archive.org/details/6502_Applications Ich meine
er nimmt einen 6522 VIA für I/O.
Darin u.a.
Morsetonerzeugung
Sirene
Musikprogramm (Melodien abspielen)
Damit ist klar dass die einfachen Dinge schon vor > 40 Jahren erledigt
wurde. Das Rad muss man nicht neu erfinden. Bleibt eine wahrscheinlich
endlose Diskussion welche Hardware man anschließen soll oder darf und
welche Algorithmen man gerade noch in einen 6502 Computer mit ein paar K
Speicher rein quetschen kann.
Angeschlossen wurde damals zum Beispiel so was wie ein AY-3-8910. Aus
dem Hersteller wurde später Microchip und der AY-3-8910 wurde an Yamaha
lizenziert.
annes J. (Firma: _⌨_) (pnuebergang)
21.05.2025 11:29
>PB0 ist am 6532 des Junior-Computers. Das ist ein PIO, oder auch RIOT>genannt. So, damit wäre dann schon mal klar dass es nicht um>Sounderzeugung rein mit dem 6502 geht.
Oder auch 'PIA' genannt ..
Das 440Hz Beispiel nutzt den Timer, weil ich die Timerimplementation auf
dem PiPico testen wollte.
Das zweite Beispiel
Beitrag "Re: Einfache CPU, einfacher Rechner, nur zum Lernen, Erfahrung?"
nutzt nur den Port. Den kannst du auch durch die Portadresse für den
Lautsprecher eines Apple2 ersetzen und ist damit ziemlich universell.
Der Grund für die zweite Implementierung war, weil ich die Zyklentreue
des Simulators testen wollte.
Hardwarevoraussetzungen sind also:
6502, Speicher und irgend ein Portpin, an dem ein Lautsprecher hängt.
Christoph M. schrieb:> Den kannst du auch durch die Portadresse für den> Lautsprecher eines Apple2 ersetzen und ist damit ziemlich universell.> Der Grund für die zweite Implementierung war, weil ich die Zyklentreue> des Simulators testen wollte.>> Hardwarevoraussetzungen sind also:>> 6502, Speicher und irgend ein Portpin, an dem ein Lautsprecher hängt.
Kleines Detail zur Ergänzung am Rande:
Der Lautsprecher vom Apple II hängt an einem FlipFlop was toggelt wenn
man eine bestimmte Adresse irgendwie anspricht:
https://8bit-museum.de/scans/apple/apple2shematic.jpg
Christoph M. schrieb:> Hardwarevoraussetzungen sind also:> 6502, Speicher und irgend ein Portpin, an dem ein Lautsprecher hängt.
Na ja, besser ein Analogausgang mit mehreren bit Auflösung, dann musst
du nicht so hohe Samplerate nutzen.
G. K. (zumsel)
21.05.2025 13:11
>Der Lautsprecher vom Apple II hängt an einem FlipFlop was toggelt wenn>man eine bestimmte Adresse irgendwie anspricht:
Ein sehr guter Hinweis. Das hat zumindest den Vorteil der Zeitersparnis,
weil man das Bit nicht zurück lesen und manuell toggeln muss.
Der Link
https://8bit-museum.de/scans/apple/apple2shematic.jpg
geht nicht: "Zugriff nicht gestattet - stephan(at)8Bit-Museum.de"
In diesem Link wird auf die Rechtecksignaltonerzeugung eingegangen:
https://www.xtof.info/making-apple-ii-sing.html
Ganz unten im "Softdac Soundediter Video" gibt es eine erstaunlich gute
Sprachausgabe.
Hannes J. schrieb:> Angeschlossen wurde damals zum Beispiel so was wie ein AY-3-8910. Aus> dem Hersteller wurde später Microchip und der AY-3-8910 wurde an Yamaha> lizenziert.
Ich erinnere mich: Das Ding war relativ teuer, konnte aber so eine Art
Synthesizer sein. Zwei, drei Jahre spaeter waren die Apple ][ und die
ersten IBM-PC auf dem Markt. Und dann begann der PC-Markt zu einen
wirklichen Massenmarkt zu werden.
Nur bei uns im pysikalischen Institut, da blieb der Commodore 8032 noch
lange in Benutzung. Das IEEE488 (oder GPIB)-Interface war halt eingebaut
(ohne Zusatzkosten) und man konnte schoene HP-Messgeraete anschliessen
(Diplom-Studenten waren kostenlos und Doktoranden Halb-Preis haben dann
die Software geschrieben)
Damals gab es für die C= CBM eine Bastelei, da wurde ein
Widerstandsnetzwerk an den Userport angeschlossen, das bildete einen
passiven DA-Wandler.
Das erzeugte einen erstaunlich guten Sound...
Back to Topic:
Hier kann man per Browser einen Merlin Macroassembler auf einem Apple II
laufen lassen:
https://archive.org/details/544_Merlin_Big_Mac
Hier gibt es etwas Doku dazu:
http://www.textfiles.com/apple/DOCUMENTATION/
Es gab auch einen lustigen Debugger für den Apple II, IMHO "Quicktrace",
diesen konnte man in das RAM der 80-Zeichen-Karte verschieben.
Und es gab auch einen Einsprung in Quicktrace in den man via Interrupt
reinspringen konnte, praktisch war ein entsprechender Taster an den
entsprechenden Kontakten der Slots oder an der CPU.
Das ist alles ziemlich lange her.
Und Echtzeit Strategie für 2 menschliche Player gleichzeitig (via
Paddles) gab es bereits 1982 für den Apple II:
https://www.youtube.com/watch?v=CgNIOkkGTQchttps://www.youtube.com/watch?v=9D-z3dQwxcg
Die Steuerung der Rakete mit dem Paddle war allerdings ziemlich
schwierig.
Quasi ein Vorgänger von Command & Conquer.
Noch mehr back to topic: Es gab auch Software für den Apple II die
polyphone Musik abspielen konnte.
Christoph M. schrieb:> Im Moment wird gerade die Programmierung eines 6502 Computers> diskutiert.
Von wem?
Christoph M. schrieb:> Hier das Abspielen einer Tonleiter:
Ist der Beitrag eine Frage oder ein Denkanstoß?
Michael B. schrieb:> Sorry, Rechteckbeeps sind kein Sound.
Ja und nein - einige der bekanntesten Sounds der Technogeschichte sind
tatsächlich Rechtecksignale, freilich durch marod(ierend)e HW deformiert
und resoniert.
Hannes J. schrieb:> Damit ist klar dass die einfachen Dinge schon vor > 40 Jahren erledigt> wurde.
Vor allem muss man mal klären, WAS hier programmiert werden soll:
A) die CPU
B) ein spezieller Computer mit dieser CPU
C) ein SoundChip in einem Computer mit dieser CPU?
Für a) bin ich ebenfalls der Meinung dass die CPU keine Rolle spielen
kann, wenn es ums Pintoggln geht.
Für b) reden wir von z.B. dem VC20 mit dem das weidlich gemacht wurde.
Neben den Stimmen des SoundChips konnte der in der Tat auch Portpins
tooglen, u.a. mit selbstgebauter HW:
http://engineer.bplaced.net/arcor/c64ioboard.html
Die funktionierten am C64 und auch am VC20. Und ja, das ist in der Tat
40 Jahren her. Schock!
Für c) reden wir wahrscheinlich vom SID. Auch der konnte DAC, wenn man
es richtig anstellte und auch PWM. Als Emulation im (damaligen Cyclone 4
mit z.B. 8 virtuellen Chips)
http://www.96khz.org/htm/sidemulation2.htm
(oops auch schon 20 Jahre her)
Oder reden wir von geschickter 1-Bit Musik? Wenn man wirklich mit 1Bit
als Port Musik machen will, braucht es PDM mit Filter und damit einen
Modulator mit rund 1MHz, wenn es nach was klingen soll. Die Qualität aus
einem 8Bit-6810 oder 6502 reicht dafür nicht. Das wird zu sehr Roboter,
wegen der harmonischen Oberwellenverzerrungen infolge des
Abtastproblems.
Und dann blieben noch die Alarmsirenen, die ich hier schon mal im Forum
vorgestellt hatte:
Man nimmt zwei Zähler mit zwei unterschiedlichen Primzahlen und togglt
nach Überlauf den jeweilige Port-Pin. Beide Auasgänge werden mit Exor
verknüpft. Damit kann man mit einem langsamen Prozessor eine PDM-Dreieck
erzeugen. Durch Hinzunahmen weiterer Zähler dieser Art kommt man additiv
zu dissonanten Akkorden.
> J. S. (engineer)
Da freue es mich ja, dass ein echter Profi antwortet :-)
Ich habe mal versucht, deinen Vorschlag mit dem hier
Beitrag "6502 Emulator PiPico"
umzusetzen.
Die Soundausgabe erfolgt über einen RC-TP mit 330Ohm,100nF auf dem
PC-Lautsprecher. Leider ist das Mikrophon der Webkamera ziemlich
schlecht.
1
; Prime Sound
2
3
; Algo Proposal von J. S. (engineer):
4
; Man nimmt zwei Zähler mit zwei unterschiedlichen Primzahlen und togglt
5
; nach Überlauf den jeweilige Port-Pin. Beide Auasgänge werden mit Exor
6
; verknüpft. Damit kann man mit einem langsamen Prozessor eine PDM-Dreieck
J. S. schrieb:> Vor allem muss man mal klären, WAS hier programmiert werden soll:
Die Casios hatten ja zwei CPUs. Einen für die Grundwellen und die
Stimmung, den anderen für die "Filter"-Berechnungen.
Christoph M. schrieb:> Ich habe mal versucht, deinen Vorschlag mit dem hier> ... umzusetzen.
Ich sehe noch nicht, wieso man die Primzahlentabellen braucht. Es sind
nur 2 Zähler mit zwei Zahlen, also z.B. einer rennt bis 17 und ein
anderer bis 19 - und das auf derselben Frequenz. Damit ergibt sich eine
kontinuierlich ändernden PDM. In der gefilterten Version ist das ein
Dreieck, je nach High-Cut geht es Richtung Sinus.
Der Ton im mp3 hört sich nicht so an. Da höre ich zwei Töne. Exor
involviert?
J. S. schrieb:> Der Ton im mp3 hört sich nicht so an.
Die typischen Wellenformen im Prophet VS oder als Synthemu für den
Yamaha TX16W konnten sich öfter so anhören.
Wobei man bei letzterem besser beraten war, mit gesampleter
Schallplattenmusik zu arbeiten.
Erst das neuere alternative Betriebsystem brachte einen netten Filter
mit. Der Programmierer meinte dazu, so gut es halt ging bei dem Ding.
Hatte er aber doch erstaunlich gut hinbekommen.
J. S. (engineer)
>Ich sehe noch nicht, wieso man die Primzahlentabellen braucht. Es sind>nur 2 Zähler mit zwei Zahlen, also z.B. einer rennt bis 17 und ein>anderer bis 19 - und das auf derselben Frequenz.
Das ist keine Tabelle, sondern ein Kommentar (es steht ein ; davor ).
Ich habe die Primzahlen rein kopiert, damit man sie schnell ablesen und
im Code ändern kann.
Der Code repräsentiert zwei Zähler x und y, die mit der selben Frequenz
dekrementiert und bei 0 mit der jeweiligen Primzahl geladen werden.
'eor #1' ist der Exor-Befehl.
1
; Definition der MOS6532 PIA (Peripheral Interface Adapter) Adressen
2
PBD = $1A82 ; Port B Data Register (Speaker-Ausgang)
3
PBDD = $1A83 ; Port B Data Direction Register
4
5
.org $300 ; Programmstartadresse
6
7
lda #$1
8
sta PBDD ; Setze PB0 (Port B, Bit 0) als Ausgang
9
10
loop:
11
lda #0 ; Lade Akku mit 0 (Vorbereitung für XOR-Operation)
12
dex ; Dekrementiere X-Zähler
13
bne n1 ; Wenn X != 0, überspringe nächsten Block
14
ldx #13 ; Primzahl 13 als Überlaufgrenze für Zähler 1
15
eor #1 ; Toggle Bit 0 im Akku (A ^= 1)
16
17
n1:
18
dey ; Dekrementiere Y-Zähler
19
bne n2 ; Wenn Y != 0, überspringe nächsten Block
20
ldy #17 ; Primzahl 17 als Überlaufgrenze für Zähler 2
21
eor #1 ; Toggle Bit 0 im Akku (A ^= 1)
22
23
n2:
24
sta PBD ; Schreibe Wert auf Port B (Speaker-Ausgang)
Apropos: Könnte es sein, dass sich die Folge nach 13*17=221 Durchläufen
wiederholt? Damit wäre dann die Grundperiode immer das Produkt der
Primzahlen mal der Zyklenzahl und Zykluszeit des Codes.