DefleMask 7f released!, Game Boy ROM BUILDER FTWWWWW!!.
NEWS:
01: Game Boy ROM and GBS Exporter! (remember always to use an accurate Game Boy Emulator, such as Visual Boy Advance, or the actual Hardware!).
02: Custom Keyboard Layouts added and keys editor!.
03: Fixed a bug regarding to the Note Up shortcut, it was limited to octave 3.
04: Fixed a bug introduced in the latest release, regarding to loading a premade instrument.
05: Fixed a bug in the GENESIS Rom Builder, it was disabled in the previous release.
06: Manual Updated.
Yeah, as I said in chipmusic.org, I'm working in a more compatible way of change the volumes dinamically. Lot of emulators do not emulate some obscure features of the GB.
I will release an update soon with more compatible GB exporting.
What did Gameboy game programmers do to get ayround dynamic volume changes? Hardware envelopes?
Yes, hardware envelopes, or the obscure "hack" of increment the vol value by 1 repeatedly to reach the desired value.
I will use this method in the next release, it is correctly emulated by VBA-M and NezPlug. And of course it works in the actual hardware.
What I don't get though is this: what made dynamic volume changes so 'obscure', or so little used? In other words, why is it not as common as it is in NES games, for instance, considering it's the superior volume control method?
Now that you mention it, I remember there being an option in XPMCK's GB mode to determine whether you wanted the less powerful but better emulated volume control, or the more flexible but badly emulated method...
The hardware of the Game Boy was designed to use the hardware envelopes, so the unique way of manual changing the volume is to restart the channel, and this makes lot of noise because of the reset of the waveform position, it is not suitable for software envelopes.
BUT, there is a, maybe bug or an undocumented feature in the Game Boy, and it consist in setting the envelope hardware to up with size 0, because, this registet write, will not enable the envelope, but it will increase by 1 the current volume!, without restarting the channel!. This was used many times and this will be used in DefleMask.
The NES is a different world, it can change the volume at any time, without reseting the channel. For this reason is lot common see this in NES, but less suitable in Game Boy. Changing the volume of a channel while it is sounding is not a problem in NES.
WOW!, DefleMask 8 Released!. MANY NEWS! and changed a little the work flow of the tracker.
NEWS:
Soundchip Added: Ricoh 2A03
System Added: Nintendo NES
Effect Added: EFxx - Global Fine Pitch (AWESOMEEE!!).
Added NSF Export for Nintendo NES.
Added support for raw PCM samples in Nintendo NES.
Added support for no limit range in the Arpeggio Macro (no more 2 octaves limit).
Added an sound output waveform viewer to the main DefleMask screen (very useful while you are editing FM Instruments!).
Added control to the Noise mode of the soundchips by using the Duty Macro/Effects.
Added a new texture for skins: backwaveform.
Added a new color for skins: waveform.
Added some changes to the GUI.
Fixed the impossibility to change the noise mode of the Game Boy while a note is sounding.
Fixed a bad functionality of the undo/redo system.
Fixed a PCM Samples desynchronization.
Fixed a bug with the wavetables save window.
Fixed a bug while concatenating portamento to note effects.
Fixed an unsynch bug related to having uneven count of total rows.
Fixed the impossibility to use a channel of the SN76489 without a volume envelope.
Fixed lot of minor bugs.
Both Windows and Linux builds updated.
Manual Updated (please read it, there are some very useful things there, for example: the use of the Arpeggio Macro with PCM Samples to trigger them freely).
Deflemask NSFs don't work in any player other than foobar2000. I suspect the PCM playback method is incompatible with the NSF spec, and this somehow prevents "good" NSF players from playing the files. I haven't tested on hardware yet (I'm not in a situation where I can easily hook up my hardware to my computer) but I'd wager that it doesn't work on that either. EDIT: Apparently the NSF never returns from play routine, and that's what's preventing it from playing in more accurate players.
Would be nice to have the option to use DPCM as well. Is that on the to-do list?
EDIT: Found a few bugs.
1. Exported NSFs don't loop unless B00 is added at the end (otherwise they just stop dead at the end). This might be caused by the not returning from play routine as well, but I'm not certain. I haven't checked other formats either.
2. NTSC+PAL NSFs don't seem to have a PAL pitch table, is this intentional? PAL-only NSFs play fine though.
3. In Options, enabling the oscilloscope ("waveform viewer") makes the check marks in other checkboxes invisible, even though they're still there.
Failing to return from PLAY is not a problem. That should be fine.
The problem seems to be that the NSF is trying to control interrupts.
Neither PLAY nor INIT routine is allowed to use SEI, CLI, or enable intterupts via $4017. Hardware players (and some software NSF players) require exclusive use of interrupts.
If you write $4017, the interrupt flag must never be clear. Write $40 or $FF or $C0 or something along those lines.
Edit: Also should not write to $2000, or any other PPU registers. These are forbidden for NSF (again, needed by the player).