#chiptunes — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #chiptunes, aggregated by home.social.
-
Kommission z80 (https://www.tiktok.com/@kommission.z80) using USBSID-Pico
#ebm #ebmmusic #industrialmusic #chiptunes #usbsid -
Kommission z80 (https://www.tiktok.com/@kommission.z80) using USBSID-Pico
#ebm #ebmmusic #industrialmusic #chiptunes #usbsid -
New video! Performing some simple hardware (and software) mods on the new C64 Ultimate to improve the experience a bit.
YouTube: https://youtu.be/_Mt0ZQE72vk
PeerTube: https://makertube.net/w/x7uKtSqS8u2H1ctQkiFh1k#Commodore #Commodore64 #C64 #C64U #C64Ultimate #Commodore64Ultimate #Hardware #Mods #LED #RESET #RetroGaming #RetroComputing #DolphinDOS #Fastloader #SID #ChipTunes #MOS6581
-
New video! Performing some simple hardware (and software) mods on the new C64 Ultimate to improve the experience a bit.
YouTube: https://youtu.be/_Mt0ZQE72vk
PeerTube: https://makertube.net/w/x7uKtSqS8u2H1ctQkiFh1k#Commodore #Commodore64 #C64 #C64U #C64Ultimate #Commodore64Ultimate #Hardware #Mods #LED #RESET #RetroGaming #RetroComputing #DolphinDOS #Fastloader #SID #ChipTunes #MOS6581
-
New video! Performing some simple hardware (and software) mods on the new C64 Ultimate to improve the experience a bit.
YouTube: https://youtu.be/_Mt0ZQE72vk
PeerTube: https://makertube.net/w/x7uKtSqS8u2H1ctQkiFh1k#Commodore #Commodore64 #C64 #C64U #C64Ultimate #Commodore64Ultimate #Hardware #Mods #LED #RESET #RetroGaming #RetroComputing #DolphinDOS #Fastloader #SID #ChipTunes #MOS6581
-
New video! Performing some simple hardware (and software) mods on the new C64 Ultimate to improve the experience a bit.
YouTube: https://youtu.be/_Mt0ZQE72vk
PeerTube: https://makertube.net/w/x7uKtSqS8u2H1ctQkiFh1k#Commodore #Commodore64 #C64 #C64U #C64Ultimate #Commodore64Ultimate #Hardware #Mods #LED #RESET #RetroGaming #RetroComputing #DolphinDOS #Fastloader #SID #ChipTunes #MOS6581
-
New video! Performing some simple hardware (and software) mods on the new C64 Ultimate to improve the experience a bit.
YouTube: https://youtu.be/_Mt0ZQE72vk
PeerTube: https://makertube.net/w/x7uKtSqS8u2H1ctQkiFh1k#Commodore #Commodore64 #C64 #C64U #C64Ultimate #Commodore64Ultimate #Hardware #Mods #LED #RESET #RetroGaming #RetroComputing #DolphinDOS #Fastloader #SID #ChipTunes #MOS6581
-
New video: [X68000] Granada
This also appeared on the Sega Genesis/Mega Drive.
https://spectra.video/w/8gYnRizqnierikYVKHzoFr
#PeerTube #chiptunes #chiptune #x68000 #x68k -
New video: [X68000] Granada
This also appeared on the Sega Genesis/Mega Drive.
https://spectra.video/w/8gYnRizqnierikYVKHzoFr
#PeerTube #chiptunes #chiptune #x68000 #x68k -
Figure 0C: Someone who is obsessed with the Retrig command in LSDJ’s noise channel. I am not sure if that’s what the mighty @defensem3ch meant with “the joys of noise” hehe
#lsdj #littlesounddj #tracker #trackers #chiptun #chiptunes #chipmusic #gameboy #noisemusic
-
Figure 0C: Someone who is obsessed with the Retrig command in LSDJ’s noise channel. I am not sure if that’s what the mighty @defensem3ch meant with “the joys of noise” hehe
#lsdj #littlesounddj #tracker #trackers #chiptun #chiptunes #chipmusic #gameboy #noisemusic
-
New video for Patrons:
TND232 Tandy Serial Port Soundcard
-
New video for Patrons:
TND232 Tandy Serial Port Soundcard
-
New video for Patrons:
TND232 Tandy Serial Port Soundcard
-
New video for Patrons:
TND232 Tandy Serial Port Soundcard
-
New video for Patrons:
TND232 Tandy Serial Port Soundcard
-
Psst: U down cuz summer is over?
You may find comfort in...
RADIO IRRTUM!
(on air from Berlin)
↓↓↓ Deutsch Version below unten ↓↓↓
Da next beautiful issue of #RadioIrrtum! will air this Saturday, 2025/09/27, 8:00pm UTC+2, Berlin time. At Alex Berlin FM at 91MHz / DAB+ K7D around #Berlin + worldwide at https://www.alex-berlin.de/radio-livestream .
Why? What is this?
#Radio Irrtum! is a German language #radioShow exploring the sonic vastness of the #underground. Emitted transmissions may raise attention for new unheard #music all over this planets genre spectrum. Don't worry about that #GermanLanguage - it's all about the #music!
This time covering stuff like
- German new wave disco post punk dub pop
- Gameboy #chiptunes
- toffee-nosed #UKGarage with spoken words on top
- innovative IDM #Bass straight outa Berlin
- something they say is #BerlinTechno but I dunno
- totally #defective Elektronic Sounds
- cinematic #musiqueConcrete
- #Punk, as in
- #Mexican #Eggpunk
- sad #Berlin #Postpunk
- cinematic UK Postpunk
- Music from the Top CEO floor of the #Fediverse
- bone-dry #prairieRomantic
Lots of this can't be found at #Spotify, oh nose!! There is #CreativeCommons music included and of course super cool artists from the Fediverse will be featured, as @[email protected], @[email protected], or @[email protected] . Thank you for your cool music and for keeping the music spirit alive within the Fediverse!
So: If at least a bit interested in kewl new unusual #music, tune in! 📻
And if you have questions? I'll gladly answer! Just ask here!
Playlist + manuscript after the show also here.
CU all (?) on Saturday.
↑↑↑↑↑↑ English version above, the Deutsche welche jetzt ↓↓↓↓↓↓
Radio Irrtum! kommt näher → Samstag, 27.09.2025, 20:00 isses soweit auf Alex Berlin (FM 91MHz/DAB+ K.7D / Stream URL oben).
Also die seltsame Funk(el)sendung, in der planetenumfassende Weiten des musikalischen Untergrunds erforscht werden.
Mit so Sachen wie…
- neuer alter deutscher new wave disco post punk dub pop
- Chiptunes vom Gameboy
- hochnäsiges UK Garage mit spoken Words
- innovativen IDM Bass auuuuuus Berlin
- ein Dingens, was der Berliner Technoscene zugeschrieben wird
- völlig defekte Elektronik Sounds
- cinematic musique concrète
- Punk, u.a.
- Eggpunk aus Mexiko
- traurigen Postpunk aus Berlin
- cinematic Postpunk aus den UK
- Musik aus dem Herzen des Fediverse
- staubtrockene Prärieromantik
Vieles davon gibz nich auf Spotify, Creative Commons Musik kommt vor; und wir haben diverse Fediverse Künstler:innen vertreten (s.o.). Yo.
Wird wieder heftig schön! Playlist + Manuskript nach der Sendung am Sonntag hier drunter. Fragen einfach hier stellen – ich antworte.
#noAIinMusic #musicRecommendations -
Psst: U down cuz summer is over?
You may find comfort in...
RADIO IRRTUM!
(on air from Berlin)
↓↓↓ Deutsch Version below unten ↓↓↓
Da next beautiful issue of #RadioIrrtum! will air this Saturday, 2025/09/27, 8:00pm UTC+2, Berlin time. At Alex Berlin FM at 91MHz / DAB+ K7D around #Berlin + worldwide at https://www.alex-berlin.de/radio-livestream .
Why? What is this?
#Radio Irrtum! is a German language #radioShow exploring the sonic vastness of the #underground. Emitted transmissions may raise attention for new unheard #music all over this planets genre spectrum. Don't worry about that #GermanLanguage - it's all about the #music!
This time covering stuff like
- German new wave disco post punk dub pop
- Gameboy #chiptunes
- toffee-nosed #UKGarage with spoken words on top
- innovative IDM #Bass straight outa Berlin
- something they say is #BerlinTechno but I dunno
- totally #defective Elektronic Sounds
- cinematic #musiqueConcrete
- #Punk, as in
- #Mexican #Eggpunk
- sad #Berlin #Postpunk
- cinematic UK Postpunk
- Music from the Top CEO floor of the #Fediverse
- bone-dry #prairieRomantic
Lots of this can't be found at #Spotify, oh nose!! There is #CreativeCommons music included and of course super cool artists from the Fediverse will be featured, as @[email protected], @[email protected], or @[email protected] . Thank you for your cool music and for keeping the music spirit alive within the Fediverse!
So: If at least a bit interested in kewl new unusual #music, tune in! 📻
And if you have questions? I'll gladly answer! Just ask here!
Playlist + manuscript after the show also here.
CU all (?) on Saturday.
↑↑↑↑↑↑ English version above, the Deutsche welche jetzt ↓↓↓↓↓↓
Radio Irrtum! kommt näher → Samstag, 27.09.2025, 20:00 isses soweit auf Alex Berlin (FM 91MHz/DAB+ K.7D / Stream URL oben).
Also die seltsame Funk(el)sendung, in der planetenumfassende Weiten des musikalischen Untergrunds erforscht werden.
Mit so Sachen wie…
- neuer alter deutscher new wave disco post punk dub pop
- Chiptunes vom Gameboy
- hochnäsiges UK Garage mit spoken Words
- innovativen IDM Bass auuuuuus Berlin
- ein Dingens, was der Berliner Technoscene zugeschrieben wird
- völlig defekte Elektronik Sounds
- cinematic musique concrète
- Punk, u.a.
- Eggpunk aus Mexiko
- traurigen Postpunk aus Berlin
- cinematic Postpunk aus den UK
- Musik aus dem Herzen des Fediverse
- staubtrockene Prärieromantik
Vieles davon gibz nich auf Spotify, Creative Commons Musik kommt vor; und wir haben diverse Fediverse Künstler:innen vertreten (s.o.). Yo.
Wird wieder heftig schön! Playlist + Manuskript nach der Sendung am Sonntag hier drunter. Fragen einfach hier stellen – ich antworte.
#noAIinMusic #musicRecommendations -
https://www.youtube.com/watch?v=RTtmsbH4jC0
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XIV (2023)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=232980#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=RTtmsbH4jC0
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XIV (2023)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=232980#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=RTtmsbH4jC0
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XIV (2023)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=232980#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=RTtmsbH4jC0
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XIV (2023)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=232980#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=RTtmsbH4jC0
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XIV (2023)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=232980#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=q4Fg7V2DYCI
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XIII (2016)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=151275#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=q4Fg7V2DYCI
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XIII (2016)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=151275#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=q4Fg7V2DYCI
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XIII (2016)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=151275#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=q4Fg7V2DYCI
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XIII (2016)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=151275#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=q4Fg7V2DYCI
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XIII (2016)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=151275#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=4gckiwzOW9U
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XII (2013)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=120907#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=4gckiwzOW9U
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XII (2013)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=120907#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=4gckiwzOW9U
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XII (2013)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=120907#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=4gckiwzOW9U
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XII (2013)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=120907#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=4gckiwzOW9U
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XII (2013)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=120907#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=7hiAkLAqsiI
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XI (2012)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=112423#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=7hiAkLAqsiI
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XI (2012)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=112423#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=7hiAkLAqsiI
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XI (2012)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=112423#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=7hiAkLAqsiI
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XI (2012)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=112423#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
https://www.youtube.com/watch?v=7hiAkLAqsiI
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored modeplaying: Wonderland XI (2012)
by: Censor Design
player: Vice SDL2
https://csdb.dk/release/?id=112423#c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
-
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored mode playing: Wonderland XIV (2023) by: Censor Design player: Vice SDL2 csdb.dk/release/?id=... #c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
Wonderland XIV by Censor Desig... -
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored mode playing: Wonderland XIV (2023) by: Censor Design player: Vice SDL2 csdb.dk/release/?id=... #c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
Wonderland XIV by Censor Desig... -
USBSID-Pico (v1.3 PCB) with 2x MOS8580 in mirrored mode playing: Wonderland XIV (2023) by: Censor Design player: Vice SDL2 csdb.dk/release/?id=... #c64 #commodore #commodore64 #8bit #chiptune #chiptunes #sid #mos6581 #6581 #mos8580 #8580 #demo #usbsid-pico #usbsid #usbsidpico
Wonderland XIV by Censor Desig... -
Arduino and AY-3-8910 – Part 2
Following on from my initial experiments in Arduino and AY-3-8910 this post looks at the sound generation capabilities in a little more detail and adds some basic MIDI control.
- Part 1 – Getting started and looking at playing YM files.
- Part 2 – Adding basic MIDI control.
- Part 3 – Basic experiments with direct digital synthesis.
- Part 4 – Using the AY-3-8910 as a 4-bit DAC for Mozzi.
- Part 5 – Driving four AY-3-8910s using my AY-3-8910 Experimenter PCB.
https://makertube.net/w/3CxNBDKu5Gm6MQzMcLZYz6
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
These are the key tutorials for the main concepts used in this project:
- Arduino AY3891x Library: https://github.com/Andy4495/AY3891x
- Arduino Nano AY-3-8910 PCB: https://github.com/GadgetReboot/AY-3-8910
- AY-3-8910 on synth DIY wiki: https://sdiy.info/wiki/General_Instrument_AY-3-8910
If you are new to Arduino, see the Getting Started pages.
Parts list
- Arduino Uno.
- AY-3-8910 chip.
- Either GadgetReboot’s PCB or patch using solderless breadboard or prototyping boards.
- 5V compatible MIDI interface.
- Jumper wires.
AY-3-8910 Sound Generation
The most basic means of sound generation is to use the three tone generators to generate square waves at a frequency set using the on-chip registers (note in the following data from the datasheet, the R numbers are in octal – so there are 16 registers in total):
I don’t plan to get into the ins-and-outs of how to interface to the chip, instead I’ll link off to some excellent discussions here:
- https://github.com/Andy4495/AY3891x/blob/main/Register-Summary.md
- http://blog.tynemouthsoftware.co.uk/2023/01/driving-ay-3-8910-ym2149-from-8-bit.html
- Sections 2.4 and 2.5 in the AY-3-8910 datasheet.
The frequency registers have a 12-bit resolution, spread over two 8-bit registers as shown below.
The datasheet tells us how to calculate the value to write to the register for a specific frequency:
- Reg Value = System Clock / (16 * frequency)
For a 1MHz clock, the register value is thus 62500 / frequency, so the higher the frequency, the lower the register value. This means that concert A at 440Hz requires the value 62500 / 440 = 142, so:
- R1 = 142 >> 8;
- R0 = 142 & 0xFF;
For a 1MHz clock, the range of frequencies goes from 1MHz / 16 to 1 MHz / (16 * 4095) or ~62.5kHz to 15 Hz
The AY3891x library has a set of definitions that already defines the frequencies for each MIDI note from C0 to B8.
The volume for the note is set in another register:
When Mode=0, the amplitude is set by the 4-bit fixed level. When Mode=1, the amplitude is controlled by the built-in envelope generator.
The envelope generator is a “global” setting for all channels, so for finer control, people often wrote their own envelope generator, manipulating the volume levels directly.
The datasheet describes the four parameters required to define an envelope:
Envelopes have a cycle time, which is set by R13 and R14 in a similar way to the frequency. This time the formula is:
- Reg value = System Clock / (256 * env frequency)
Once again this is split over two registers, but this time supports a full 16-bit value.
There are graphical representations of what the combinations of the envelope bits mean, but I must confess I’m not entirely sure I understand them all and some don’t seem to sound, at least at the frequency I’ve chosen.
The Circuit
I’m reusing the PCB from GadgetReboot from Part 1, but this time I’ve added the button in (it is connected to A5 and GND) and added headers to the UART connection.
Unfortunately the UART only has GND, TX, RX – to use it with one of my Arduino MIDI Interfaces also requires a 5V connection, so I’ve taken that from the SD card header.
The Code
The note-playing code comes from the “AY3891x_EX3_Simple_Tone” example, including the ATmega328 specific code for the 1MHz clock. There is a table of note frequencies already provided for notes C0 through to B8, so it is just a case of mapping these onto MIDI notes C0 (12) through B8 (119).
One thing I wanted was to support simple polyphony using all three channels. But that means deciding what to do when a fourth note comes in – i.e. to ignore it or to replace one of the existing playing notes. I’ve left options for both.
I also wanted to make use of the channel volume too, so it is relatively trivial to map the MIDI 0..127 note velocity values onto the 0..15 levels for the sound generator. This is using the “fixed” level mode mentioned earlier.
But I also wanted the option to play with the envelopes, so I’ve wired in the button and have an option to use that to change between the different envelopes. As I’m not attempting anything particularly complex right now, I just gone with a fixed 10Hz frequency for the envelope generator’s cycle.
It won’t win any prizes for synthesis, but it does work.
Closing Thoughts
Fundamentally, without the envelope generation this is the same as a three-channel Arduino tone() function, but at the time that was pretty ground-breaking as it allowed a system to keep playing a tone without having to keep driving it from the CPU.
Add in the noise channel, amplitude control and envelopes and you can start to see why this is also a step up musically too.
But when you get to making custom, per-channel envelopes, or even manipulating the 4-bit level control as a simple DAC or PCM generator, then you can start to see how some of the outstanding chiptunes of the time could be generated.
But even in this simple form there is still a fair bit more that could be done. Some examples might be:
- Adding a potentiometer to control the envelope frequency. The when used with the triangle envelope this will act as a modulation control.
- Add MIDI control values for the volume levels, modulation and choice of envelope.
- Define some specific parameters to create “instruments” which can be selecting using MIDI program change messages.
- Get the noise generator into the mix and define some percussion “instruments” too.
But what I really want to do is start taking a look at some of the sound drivers that were written that allow some of the chip tunes to come out.
I’m also getting to the point where I want my own PCB with things on it that I want to play with too.
Kevin
-
Arduino and AY-3-8910
I’ve had some AY-3-8910 programmable sound generators for a while and planned to do something with them, but they’ve sat in the “to think about” box for a while. But recently getting hold of the WhyEm sound card for the RC2014 has re-awakened my interest.
This is some “first looks” experiments with the AY-3-8910 and an Arduino.
- Part 1 – Getting started and looking at playing YM files.
- Part 2 – Adding basic MIDI control.
- Part 3 – Basic experiments with direct digital synthesis.
- Part 4 – Using the AY-3-8910 as a 4-bit DAC for Mozzi.
- Part 5 – Driving four AY-3-8910s using my AY-3-8910 Experimenter PCB.
https://makertube.net/w/26yAj7wAzZwCsFoBkJpZs2
Warning! I strongly recommend using old or second hand equipment for your experiments. I am not responsible for any damage to expensive instruments!
These are the key tutorials for the main concepts used in this project:
- Arduino AY3891x Library: https://github.com/Andy4495/AY3891x
- Arduino Nano AY-3-8910 PCB: https://github.com/GadgetReboot/AY-3-8910
If you are new to Arduino, see the Getting Started pages.
Parts list
- Arduino Uno
- AY-3-8910 chip
- Either GadgetReboot’s PCB or patch using solderless breadboard or prototyping boards.
The AY-3-8910 PSG
The AY-3-8910 programmable sound generator is quite an iconic chip of its time. Not as popular maybe as the SID used in the Commodore 64, but still pretty widespread use in 8-bit computers of the time and apparently a number of arcade machines too.
There are a number of “compatible” chips, including the Yamaha YM2149. There is also the AY-3-8912 which is the same as the 8910 but without one of the general purpose IO ports, which take no part in the sound generation.
I’m not going to go into the details of the device itself, for that I’ll refer to the following resources:
- https://en.wikipedia.org/wiki/General_Instrument_AY-3-8910
- https://www.vgmpf.com/Wiki/index.php/AY-3-8910
- https://rc2014.co.uk/modules/why-em-ulator-sound-module/
- http://blog.tynemouthsoftware.co.uk/2023/01/driving-ay-3-8910-ym2149-from-8-bit.html
The summary of the specification though is as follows:
- Three square wave output channels.
- Global AD envelope generator, with a selection of fixed envelopes.
- Noise generator an option on the channels.
- Mixer.
There is an 8-bit data register interface to the chip along with three control signals (BDIR, BC1 and BC2).
Sourcing AY-3-8910 Chips
I should point out that it isn’t possible to buy new AY-3-8910 or YM2419 chips these days, so any that can be found online are almost certainly reclaimed from older hardware. These may or may not work reliably, but it will be a bit of a lottery.
There is a lot of discussion about the issue here: http://blog.tynemouthsoftware.co.uk/2023/01/testing-ay-3-8910-ym2149-sound-card-for-rc2014-and-minstrel-4D.html
Some more here: https://maidavale.org/blog/remarked-chips-from-ebay/
This is why RC2014 eventually went with the “Why Emulator” approach: https://rc2014.co.uk/modules/why-em-ulator-sound-module/
My own experience is that you can get them on ebay pretty cheaply. They are often described as “new” but really they will be pulled from older hardware and be cleaned up to look new again.
Usually this means re-tinning the pins with solder, sanding down the original markings, and re-etching the text and logos. I guess they do this to be able to claim “as new”, but personally I’d rather they just let them be sold as reclaimed/recycled. The prices always reflect a reclaimed level of quality to me anyway.
Here is a photo of a recent batch of 10 bought as a pack from the same ebay seller.
Notice how, whilst the text and logos seem to essentially be the same, there are many differences between the actual devices:
- Depth, position, size of the molding marks.
- Depth, position, size of the pin 1 marker.
- Colour of the final finish.
- They also all have very different under-side markings and appearance (not shown).
I’ve also never seen one yet that doesn’t claim to be a Microchip device, whereas in reality most original devices I suspect would be either Yamaha YM2419 or GI AY-3-8910, so are being re-etched.
It is possible to tell if the device is a YM or AY as they respond slightly differently when the 4-bit registers get written to and read. If the value 31 is written to one of the 4-bit registers then a YM will read back 31 but an AY device will read back 15.
Full details here: http://blog.tynemouthsoftware.co.uk/2023/01/testing-ay-3-8910-ym2149-sound-card-for-rc2014-and-minstrel-4D.html
The Arduino AY3891x library includes a sketch to check and print the result (see below).
Hardware
For once, I’m using someone else’s design for my initial messing about. There is a schematic and some hardware built on a protoboard shown in the Arduino YM3891x library here: https://github.com/Andy4495/AY3891x/tree/main/extras/hardware
But there is a PCB that was designed by GadgetReboot here: https://github.com/GadgetReboot/AY-3-8910. This can be ordered directly from PCBWay and so that is what I’ve used.
The only thing to watch out for, is that D2/D3 are reversed compared to the protoboard hardware. So whilst all other pin definitions in the library examples are fine, D2 and D3 need to be swapped to use them with the PCB.
I also didn’t bother to add the power LED (and R5), the toggle switch or the additional header pins.
The full pinout interface from the Arduino to the AY-3-8910 is as follows:
AY-3-8910ArduinoDA0-DA7D2-D8, A3BC1A0BC2A1BDIRA2CLOCKD9/RESETA4 (not used in the library)The most critical one from a re-use point of view is the clock as the code uses the ATmega328P hardware Timer 1 to output a 50% duty cycle PWM signal on output OC1A (D9) to generate the 1MHz clock required by the AY-3-8910.
Using a different microcontroller will mean re-writing this part of the code for a suitable replacement timer.
The PCB also has the following Arduino GPIO pin use:
- D0/D1 – UART pin header
- D10-D13 – SD card pin header
- A4 – /RESET of the AY-3-8910 but doesn’t appear to be required to use the library.
The AY-3-8910 is powered from the +5V from the Arduino. VIN for the Arduino is not connected, so USB power is assumed.
The Code
Taking the “AY3891x_EX3_Simple_Tone” example as a starting point, the following line needs updating as shown below:
// Original line
AY3891x psg( 17, 8, 7, 6, 5, 4, 2, 3, 16, 15, 14);
// Required for use with the PCB
AY3891x psg( 17, 8, 7, 6, 5, 4, 3, 2, 16, 15, 14);This is using the “lesser number of pins” constructor, which assumes that the A8, A9, /RESET and CLOCK pins of the AY-3-8910 are not managed by the library. There is a more complete constructor to define the additional pins if required. There is a good description of how the AY-3-8910 interface works in the main source code: https://github.com/Andy4495/AY3891x/blob/main/src/AY3891x.cpp
I also switched any Serial.begin() statements to use 9600 baud for preference too.
With these changes, the simple tone example just works, as does the “AY3891x_EX8_Check_Orig_or_Clone”, which tells me I have an AY-3-8910 rather than a YM2149.
But what I really wanted was to play one of the tunes from a game I remembered. My first introduction to AY-3-8910 music was the 128K Spectrum version of The Neverending Story. This was one of the two games that came bundled with the original machine, and for someone used to the 48K beeps and boops it was an amazing upgrade.
Unfortunately I don’t seem able at present to find a “YM” file version of that tune to play, so instead I turned to a David Whittaker classic – “Glider Rider”. The “YM Jukebox” GitHub repository has a whole pile of YM files ready to use here: https://github.com/nguillaumin/ym-jukebox/tree/master/data/David%20Whittaker
There are (I believe) two key ways to get “chiptunes” for the AY-3-8910. A YM file is a stream of the register values sent to the chip to direct the sound generation. With one of these files, it is simply a case of turning these values into a C array and it can be included in an Arduino sketch (there are several steps required, see below, but it is all doable).
Another common way to get tunes is an “AY” file. As I understand things these are the actual Z80 assembler instructions required to drive the AY-3-8910 chip, so extracting the required data for use on another system is not so easy. These are really designed to be used on the original systems or via emulation.
To produce an Arduino source code file from a YM file requires the following steps (described here: https://github.com/Andy4495/AY3891x/tree/main/extras/tools):
- Find and download the desired YM file.
- Decode it using: https://github.com/eqy/ymduino/blob/master/decoder.py – the force_interlacing parameter is required to correctly unpick everything.
python decoder.py GliderRider.ym force_interleaved
- Turn the resulting binary outputfile (it is always called that after using the decoder.py script) into a C structure using: https://github.com/Andy4495/AY3891x/blob/main/extras/tools/bin2c14.py
python bin2c14.py outputfile > chiptunes.h
- Take the resulting const PROGMEM structure into the “chiptunes.h” file of the “AY3891x_EX6_Chiptunes_Flash” example sketch.
Note that due to the memory limitations of the Arduino Nano, the resulting C structure for the tune will have to be cut-off at around 2000 lines, but be sure to leave the termnating part of the structure:
const byte PROGMEM psg_data[] = {
0x6C,0x07,0x7C,0x07,0x7C,0x07,0x17,0x31,0x0F,0x00,0x00,0x00,0x00,0x20,
0x6C,0x07,0x7C,0x07,0x7C,0x07,0x1F,0x31,0x0D,0x00,0x00,0x00,0x00,0x00,
....
0x7C,0x07,0xBE,0x03,0x58,0x02,0x01,0x31,0x09,0x0E,0x00,0x00,0x00,0x00,
};If there are build errors, then it might be because the structure is still too long. 2000 lines fits for me using around 97% of the programme memory of the Arduino Nano.
If full (longer) tunes are required, then the PCB has the option to hook up to an SD card and longer files can be stored there.
YM Files
Here is a little more detail about the above process required to get a YM file into C code, mostly for my own reference (the above links all talk about it pretty well tbh).
Step 1: A downloaded YM File is usually actually compressed using LHA. 7Zip can open these files and save the extracted version ready for step 2.
Here is the difference of the start of the files shown using a hex editor. Notice the “-lh5-” header near the start showing that this is a LHA compressed file, and a filename associated with the uncompressed version, in this case glrider.ym.
Uncompressed:
We can now clearly see he header information including the file identifier “YM5!” along with title, author and copyright information in comment fields.
The AU3891x library goes on to explain: “This uncompressed binary file has the audio programming registers stored in a non-interleaved format for more efficient compression. These values now need to be interleaved for more efficient playback.”
We can find more details of the YM file format here, in the words of the creator of the format, Arnaud Carré, directly: https://www.lynn3686.com/ym3456_tidy.html
A music-file is composed of YM2149 registers generated by the
original play-routine for each 50th seconds. As the YM2149 has 14 registers 8 bits each, that means 14 bytes for 1/50 second, so 700 bytes for one second of soundchip.
When I convert an ATARI music, I play the music on the ATARI, and I
store YM2149 registers set each 1/50sec (Vertical Blank time, VBL) in a big file as follow:
VBL1:
store reg0,reg1,reg2,...,reg12,reg13 (14 regs)
VBL2:
store reg0,reg1,reg2,...,reg12,reg13 (14 regs)
...
VBLn:
store reg0,reg1,reg2,...,reg12,reg13 (14 regs)
The problem is that is takes a lot of disk-space. Just count: A 10
minutes song will take 420000 bytes on disk. But don't panic, the music are compressed with LHARC method (using LHA program from Haruyasu Yoshizaki). To reach best compression ratio, I store registers in a different order:
VBL1 reg0, VBL2 reg0, VBL3 reg0 .... VBLn reg0
VBL1 reg1, VBL2 reg1, VBL3 reg1 .... VBLn reg1
...
VBL1 reg14,VBL2 reg14,VBL3 reg14.... VBLn reg14Hence the “interleaved” format discussed previously. So looking at the file itself, specifically for YM5 it has the following format:
Offset Size Type Comment
0 4 DWORD ID of YM5 format. ('YM5!')
4 8 string[8] Check String ('LeOnArD!')
12 4 DWORD Nb of valid VBL of the file.
16 4 DWORD Song attributes (see below)
20 2 WORD Nb of digi-drum sample (can be 0)
22 4 DWORD YM2149 External frequency in Hz (ex:2000000 for ATARI-ST version, 1000000 for AMSTRAD CPC)
26 2 WORD Player frequency in Hz (Ex: 50Hz for almost player)
28 4 DWORD Vbl number to loop the song. (0 is default)
32 2 WORD Size (in bytes) of futur additinal data. (must be 0 for the moment)So we can see this playing out from the above file:
00000: 59 4D 35 21 = "YM5!"
00004: 4C 65 4F 6E 41 72 44 21 = "LeOnArD!"
0000C: 00 00 13 60 = Number of frames: 4960
00010: 00 00 00 01 = Attributes:
b0: Set if Interleaved data block.
b1: Set if the digi-drum samples are signed data.
b2: Set if the digidrum is already in ST 4 bits format.
00014: 00 00 = No digidrum samples
00016: 00 0F 42 40 = External frequency 1MHz
0001A: 00 32 = Player frequency 50Hz
0001C: 00 00 00 00 = Number of loops for the song: 0
00020: 00 00This header is then followed by:
For each digidrum sample:
4 DWORD sample size
nnnn BYTES sample data (8bits per sample)
NT-String Name of the song.
NT-String Name of the author.
NT-String Comments (YM file converter ?!)
All YM2149 registers.
4 DWORD End-File check. ('End!')Which again we can now see in the uncompressed file:
(no digidrum samples)
00022: 476C6964657220526964657200 = "Glider Rider"
0002E: 4461766964205768697474616B657200 = "David Whittaker"
0003E: 2863293139383620517569636B73696C766100 = "(c)1986 Quicksilva"
00052: 6C6C7C8C... = 4960 values for reg0
013B2: 07070707... = 4960 values for reg1
...
0FC32: 02000000... = 4960 values for reg13
10F92: 00000000... = 2x4960 additional sets of values
13652: 45 6E 64 21 = "End!"Curiously there seems to be data for 16 registers, which I guess would allow the inclusion of the two GPIO ports as well as the sound generation registers.
So to turn this into a stream of register values to send to the AY-3-8910 at a rate of 50Hz requires take the same “VBL” value for each register in turn and de-interleaving it.
This is the output from the decoder.py file as it processes the above:
Attempting to read file at glrider.ym...
YM5! format file detected based on first four bytes of file...
4960
File is interleaved...
Song title: Glider Rider
Author: David Whittaker
Comments: (c)1986 Quicksilva
Data length is 79360 bytes...
Song length is 4960 frames...
Deinterleaving...
Register 0: 0x6c 01101100
Register 1: 0x07 00000111
Register 2: 0x7c 01111100
Register 3: 0x07 00000111
Register 4: 0x7c 01111100
Register 5: 0x07 00000111
Register 6: 0x17 00010111
Register 7: 0x31 00110001
Register 8: 0x0f 00001111
Register 9: 0x00 00000000
Register 10: 0x00 00000000
Register 11: 0x00 00000000
Register 12: 0x00 00000000
Register 13: 0x20 00100000
==Frame#00000/04959======
Register 0: 0x6c 01101100
Register 1: 0x07 00000111
Register 2: 0x7c 01111100
Register 3: 0x07 00000111
Register 4: 0x7c 01111100
Register 5: 0x07 00000111
Register 6: 0x1f 00011111
Register 7: 0x31 00110001
Register 8: 0x0d 00001101
Register 9: 0x00 00000000
Register 10: 0x00 00000000
Register 11: 0x00 00000000
Register 12: 0x00 00000000
Register 13: 0x00 00000000
==Frame#00001/04959======
...
Register 0: 0x7c 01111100
Register 1: 0x07 00000111
Register 2: 0x54 01010100
Register 3: 0x00 00000000
Register 4: 0x0f 00001111
Register 5: 0x03 00000011
Register 6: 0x01 00000001
Register 7: 0x31 00110001
Register 8: 0x07 00000111
Register 9: 0x0c 00001100
Register 10: 0x0d 00001101
Register 11: 0x00 00000000
Register 12: 0x00 00000000
Register 13: 0x00 00000000
==Frame#04959/04959======Notice that this is only pulling out the 14 sound generating registers. We can see this in the resultant de-interleaved file.
We can see tha tthe first two values correspond to the first items for reg0 and reg1: 6C and 07 and finish the 14 values with 20 before starting on the new set of 14 register values (again starting with 6C and 07 in this case).
The final step turns the above data stream into a C header file mentioned above.
To play the file thus requires the following algorithm:
Every 50Hz:
Read the next 14 register values from the data
Write all 14 register values out to the AY-3-8910Closing Thoughts
I’ve really not done very much myself this time. The PCB was from GadgetReboot. The library from Andy4495. The tune data provided by the YM jukebox and all other scripts and bits of the process were available online.
Now I need to decide what I’d like to do with all this.
Kevin
-
Hey Philly come hang out tonight at Ortliebs at 7PM! CocoJoey and Trustfund Ozu are on tour but you want to catch Bubblegum Octopus and Sage Hardware
#Cybergrind #Chiptunes #Rave #Philadelphia #LiveMusic #Philly #Virtua94 #4333
-
Christian Morgenstern - Sexy World Part 2 (A2) (1998) youtu.be/l868zLGLKWM?... #electro #chiptunes #sidtunes #sidsounds #ElectronicTunes #electronicmusic #dancemusic - many more tunes : #epfav
Christian Morgenstern - Sexy W... -
How much chiptunes would a chipmunk... tune...?
Thanks to super-secret government technology arpeggios no longer sound like nails on a chalkboard in AmigoTracker 1.21! I also managed to squeeze some extra performance out of the resampler, allowing a 2x output sample rate within tolerable loading times.
The song is 4mat's amazing "back again".
-
How much chiptunes would a chipmunk... tune...?
Thanks to super-secret government technology arpeggios no longer sound like nails on a chalkboard in AmigoTracker 1.21! I also managed to squeeze some extra performance out of the resampler, allowing a 2x output sample rate within tolerable loading times.
The song is 4mat's amazing "back again".
-
https://listography.com/GothFvck/about_me/music-related_forum_profiles
I'm on a bunch of forums. I'm curious about what else is out there. Especially other #Lemmy Communities.
Any suggestions from the peanut gallery?#music #musicEquipment #musicProduction #metal #synthwave #bonkwave #NYHC #hardcorePunk #doomMetal #gothic #goth #punk #straightedge #deathMetal #gothicMetal #symphonicMetal #industrialMusic #UbuntuStudio #LinuxAudio #piracy #P2P #chiptunes
-
https://listography.com/GothFvck/about_me/music-related_forum_profiles
I'm on a bunch of forums. I'm curious about what else is out there. Especially other #Lemmy Communities.
Any suggestions from the peanut gallery?#music #musicEquipment #musicProduction #metal #synthwave #bonkwave #NYHC #hardcorePunk #doomMetal #gothic #goth #punk #straightedge #deathMetal #gothicMetal #symphonicMetal #industrialMusic #UbuntuStudio #LinuxAudio #piracy #P2P #chiptunes
-
Celebrate labor day with a brand new song about gross dudes harassing people at work!
https://www.patreon.com/posts/augusts-song-job-111298289?utm_content=join_link
#nerdRock #glitchPunk #chipTunes #laborDay