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.
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
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.
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.
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.
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.
IMHO besser, über die Jahre sind viele Umsetzungen zum stille Post Spiel geworden, entweder sind die Umsetzungen schlecht oder auf meinem Soundchip oder meinen PC-Brüllwürfeln inkompatibel, meine Ohren sind sicher nicht besser geworden.
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.
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.
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:
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...
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:
Ja und nein - einige der bekanntesten Sounds der Technogeschichte sind tatsächlich Rechtecksignale, freilich durch marod(ierend)e HW deformiert und resoniert.
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.
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?
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.
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.
Hier mal ein Sound, den ich mit einem 8bit LSFR und S
schrittweiser Verlängerung der Periodendauer erzeugen konnte.
Es klingt wie eine Maschine, die langsam hoch läuft. Interessanterweise klingt es auch so, als wenn irgend eine Art variabler Filter drinnen wäre.
Hinweis zur Aufnahme: Der Ausgang des Mikrocontrollers geht geht über einen RC-TP direkt auf den Eingang der Soundkarte.
Konnte man früher mit einem Kugelschreiber imitieren.
(wobei Sampler eigentlich viel besser geeignet sind für so Hörspielgeschichten, als Tonbandorgien)
Was soll das werden? Ein U-Boot-Maschinenraum-Simulator?
Die Assoziation "Maschinenraum" ist gut, allerdings sind U-Boote heute extrem leise. Da hört man praktisch nichts - auch wenn man direkt davor steht. Und das hat ja seinen Sinn. ;-)