The AVR-code is implemented as a bootloader, with the GBA code as the ‘main program’. This may seem weird because the main program is ARM-code to be executed by the GBA and completely unusable by the AVR, but it has the advantage that the main code can now update the ARM code over the MIDI port. Basically, this makes it possible to convert a newer version of the synth code to a .mid-file. When you send this file to the MIDI input, the firmware gets updated.
The GBA code that sits in the rest of the AVRs program memory is the actual synthesizer. It is divided in three parts: a routine that receives MIDI bytes from the AVR, an user interface to display on the GBAs LCD, a tiny sequencer and the routines that actually make the noise. The routines export most of the knobs and settings the original GameBoy hardware has to the user interface and MIDI control channels. It also has a polyphonic DDS-based soft-synth, with modifiable waveforms.
Sprites mods – GameBoy Advance as a MIDI synthesizer – Software.
Comments