Diese Seite mit anderen teilen ...

Informationen zum Thema:
Forum:
Hardware
Beiträge im Thema:
11
Erster Beitrag:
vor 2 Jahren, 9 Monaten
Letzter Beitrag:
vor 7 Monaten
Beteiligte Autoren:
Dennis Kuschel, William Buchholz, esso-es, Robin Tönniges

Soundkarte für MyCPU (DE)

Startbeitrag von Dennis Kuschel am 06.01.2015 15:30

Da sich jetzt ja schon mehrere Leute bei mir gemeldet haben, die eine Soundkarte für die MyCPU entwickeln wollen, wird es Zeit, Euch alle zusammen zu bringen! In diesem Forum könnt ihr nun ausgibig diskutieren.

Meine Randbedingungen für die Soundkarte sind aber diese:

- Wenn möglich, sollte die Soundkarte "diskret" aufgebaut werden (keine Mikrocontroller oder DSPs).
- SID-Chips sind erlaubt
- SMD-Technik vermeiden
- Die Bauteile müssen noch beschaffbar sein (SIDs z.B. über eBay)

Für die Soundkarte habe ich auf dem Bus den Adressbereich $2A00 bis $2BFF reserviert. Dieser Bereich kann unter Zuhilfenahme der Steuerleitung /IOEN2 ausdekodiert werden. Des Weiteren kann die Soundkarte den Interrupt Eingang IRQ5 der MyCPU benutzen.

Jetzt wünsche ich Euch viel Spaß beim "Brainstormen" und diskutieren !

Antworten:

hi leute,

ich bin der johannes und stell euch jetzt mal meine idee zur umsetzung einer soundkarte für die mycpu vor^^

und zwar will ich bei dem ganzen 1 - 2 SID chips verwenden, welche zusammen mit etwas address decodierlogik und einer 1MHz clock auf der ersten platine sitzen und sich auf der zweiten platine mit etwas RAM einem ROM und mit einem MOS 6510/6502 sich ein SID hardware player befindet.

der hardware player befindet sich dabei huckepack auf der sid karte und besitzt dabei eine direkte verbindung zu einem der zwei SID... oder halt den einem SID... mal schaun.

warum ich mir zusätzlich nen hardware player erdacht habe, hat folgenden grund.

man könnte mit der methode die mycpu ziemlich günstig entlassten. den bei solchen sachen wie menus oder halt ingame mucke, wo sowieso ein track in der endlosschleife läuft, lädt man einfach den track in den ram des hwplayers und drückt auf "play". für dinge wie z.B. Soundeffekte oder warnsignale, könnte man dann den zweiten SID verwenden, auf den die mycpu direkt zugreifen kann...

dass verwenden einer weiteren cpu auf dem hwplayer is zwar schon ganzschön übertrieben, jedoch stellte dieses konzept für mich persönlich noch eine machbare option dar... bin leider nur ein hobby bastler.

ich hoff ich konnte meine idee sogut wie möglich rüberbringen... im anhang befindet sich ncoh der bisherige schaltplan der SID karte. leider is das ganze noch nicht ganz fehlerfrei... werd mich aber bei zeiten ans debuggen setzen.
falls bis dahin jemanden etwas auffällt, bitte ich um eine benachrichtigung^^

der volle neu aufbau einer soundkarte, so im moto von "ich bau mir meinen eigenen synthesizer", war mir bisher zu kompliziert... bin aber auch nicht abgeneigt, falls einer von euch eine idee dazu hat^^

wir werden der mycpu schon noch ein paar töne entlocken^^

ich freu mich schon auf eure idee^^

mfg
johannes
[attachment 59 MyCPU_SID_Interface1_2.sch.pdf]

von esso-es - am 06.01.2015 17:47
mir ist jetzt schon der erste fehler aufgefallen... bei den stereo klinken beim audio I/O sind Schaft und Tip vertauscht...
also wie gesagt, der jetzige plan ist nur als inspiration gedacht^^.

von esso-es - am 06.01.2015 18:08
(Sorry, I don't understand Deutsch so I am posting in English).

A quick and dirty sound output can be implemented using the parallel port output. Early PCs used this method when sound cards were still very expensive. At its simplest a R2R ladder is used to create a DAC which can then go to an amplifier. 8-bit data is pushed out at a fixed rate to produce audio. Of course this is very CPU intensive. The Covox Speech Thing was one such device but it was so simple many people built their own.

von William Buchholz - am 19.01.2015 04:19
Hi WilliamB,

yes, you could also use a R2R ladder for digital-to-analog conversion. But this can not be handled by the MyCPU directly, because MyCPU's processing power is not sufficient for this and also a *fast* timer interrupt would be required for outputting the samples (8 kHz or faster for a reasonable sound).

But: I like this idea. Imagine you take a big SRAM that contains a wave-table (maybe digitized tones or speech). The resistor ladder is connected to the data bus of the RAM, and the lower address lines of the RAM are connected to a counter that is counted up with lets say 22 kHz (that is the sampling frequency). The upper address lines of the RAM are controlled by MyCPU, so that MyCPU is able to select the sound that shall be played. When you fill the RAM with sounds of music instruments you could then play midi sounds. And you could also fill in some speech samples and other sounds, making it possible to give computer games a nice sound.

von Dennis Kuschel - am 21.01.2015 13:41
512kB per chip is about the limit for parallel bus DIP SRAM. Using 8kHz sampling would give 64 seconds of sound total. However, this would just be one channel of sound, so music would be just one instrument at a time playing. A bit like the PC speaker days. Plus there is no amplitude control unless another circuit is added (not sure how to do that).

Since integrated circuits are allowed, the AY-3-891x series of programmable sound generators seem more suitable to the task. They are readily available on eBay and would require not much extra circuitry to interface with the CPU. A plethora of information can be found [http://bulba.untergrund.net/main_e.htm]here[/url].

Maybe both circuits can be used together? One for music and one for high quality sound effects.

von William Buchholz - am 08.02.2015 02:42
A question about how I/O addressing works:

Address $2A00 to $2BFF are reserved for the sound card. For example, I have a register I want to map to $2A00. I would have that chip enabled when both /IOEN2 is active and $2A00 is on the address bus. When /IOEN2 is active that is already decoding for addresses in the range of $2800 to $2FFF. Is it necessary to decode the entire 16-bit address or can I just look at the lowest 11 bits?

von William Buchholz - am 08.02.2015 03:02
Hi WilliamB,

of course is the SRAM based wave-table sound card very limited. My plan was to use one PCB per voice, with a maximum of 4 voices. Amplitute control would only be a problem if you would do it completely with discrete components. But one simple way would be to use digital potentiometers that can be controled via i2c. But doing "realtime" - i2c in software is a very hard task. I am aware of that the SRAM approach would end in lots of software work and high CPU load. Maybe it is really a better solution to use an integrated sound chip.

I had also a look to the AY-3-891x sound chips. But they seem to be harder to get than the SID chips (please have a look to eBay). Furthermore there are already SID chip replacements available, thus making the SID more attractive.

Regarding the I/O Addressing:
If you take /IOEN2 into account, it is sufficient to decode the lowest 11 bit. Without using /IOEN2 you would need to decode the whole 16 address bits.

von Dennis Kuschel - am 10.02.2015 13:26
When I said AY-3-891x I meant the series of chips, there is the AY-3-8910, AY-3-8912 and the AY-3-8913. The AY-3-8910 is fairly common and significantly cheaper than the SID 6581. Anyway the 6581 is a superior chip and since this is not a high volume production then it makes sense to use it (or the emulated drop-in replacments).

von William Buchholz - am 21.02.2015 16:21
Hi Leute,

hab da mal ein paar Fragen :)

Ist denn ein RAM wirklich nötig?
Der C64 hats ja auch geschafft den Sound in Echtzeit zu produzieren oder nicht?

@Dennis sind die 2 Adressbereiche die du für die Soundkarte reserviert hast zufällig für 2 SIDs gedacht?
Sprich
2A00h - 2AFF für SID 1 und
2B00h - 2BFFh für SID 2?

Ich hab mal ne Tabelle gemacht in der ich die Adressen vergeben habe... wäre das so sinvoll?
Address range

Wenn ich einen Interrupt für den Datenverkehr nutze (Du hast ja IRQ5 reserviert) sehe ich es dann richtig dass dieser quasi mit der Samplingrate der Soundkarte angesprochen wird?

Der SID wurde ja wohl meisten mit 1MHz betrieben daher ist es vermutlich auch sinnvoll diese Frequenz beizubehalten oder?

Puh, das war erstmal alles was mir einfällt :)

Danke schonmal

von Robin Tönniges - am 01.03.2017 12:07
Hi Robin,

ein RAM ist für die Soundkarte nur nötig, wenn man eine Soundkarte bauen möchte, die Musik anhand von Audio-Samples abspielen soll. So hat man fast unbegrenzte Möglichkeiten der Musik- und Sprachwidergabe. Allerdings ist der Ansatz auch Hardwaretechnisch recht aufwändig.

Die SID-Lösung ist da natürlich einfacher. Und ja, du kannst gerne die beiden reservierten Adressbereiche auf die SIDs 1 und 2 verteilen, so wie du es schon in deinem Entwurf gemacht hast.

Der Interrupt ist nur optional. Ich habe ihn vorgesehen, um die Geschwindigkeit des Abspielens der Noten besser kontrollieren zu können. Der MyCPU Timer Interrupt ist selber ja nicht konfigurierbar. Vielleicht ist ein einstellbarer Interrupt-Rate von 0 - 50 Hz brauchbar. Ich glaube zwar kaum, dass man jemals mehr als 10 Noten / Sekunde abspielen will, aber so hat man etwas Luft nach oben für evt. versetzt abgespielte Noten-Spuren und Sound-Effekte. Viel höher sollte die Interrupt-Rate aber nicht gehen, denn sonst machst du die MyCPU mit Interrupts "tot": Da sie ja bei 8 MHz Takt im Schnitt rund 1 Millionen Instruktionen pro Sekunde ausführen kann, hätte sie bei dem von dir vorgeschlagenen Interrupt-Takt von 1MHz nur Zeit um gerade eine Instruktion pro Interrupt auszuführen ;-)

Beim C64 wurde der normale Timer-Interrupt für das Abspielen der Noten benutzt. Dieser Interrupt lief mit der Netzfrequenz, also 50 Hz in Europa und 60 Hz in den USA. Viel schneller braucht der Sound-Interrupt auf der MyCPU also auch nicht zu laufen.

von Dennis Kuschel - am 22.03.2017 13:12
Zur Information:
MySnip.de hat keinen Einfluss auf die Inhalte der Beiträge. Bitte kontaktieren Sie den Administrator des Forums bei Problemen oder Löschforderungen über die Kontaktseite.
Falls die Kontaktaufnahme mit dem Administrator des Forums fehlschlägt, kontaktieren Sie uns bitte über die in unserem Impressum angegebenen Daten.