AB and KFF's build of SNESMOD includes a lot of SPC700 enthusiast dreams, all bundled into this new fork! Please check out the documentation in the package. (Binaries/executables are in the "/bin" folder.) Feel free to ask AB and KFF questions in this thread; until they get a GitHub started.

1.) After the install there is a BAT file in its root directory. (Choosing the x86_64 architecture on install options is likely a smarter option because it seems that the archive usually includes that type of lib*.dll) (Also for some reason it seems to install everything in "Program Files (x86)\mingw-w64".)

6.) From your project directory of "Super SNESMod"; within the "bin" directory delete the lib*.dll file(s) located there. (They are deprecated version(s).)

7.) Execute the smconv.exe. It will tell you that it's missing dependencies. Go to the "bin" directory within MinGW-w64 within "Program Files (x86)" The DLL files that you need will be in there. Keep executing "smconv.exe" from your project and copy each of the DLLs it tells you you need into the directory that has smconv.exe.

2017-01-09 Augustus Blackheart:
* drivers/pitchmod-1.2.h, drivers/snesmod-1.2.h: moved
driver base, freed up some ram. Deleted CmdExTab_H:
all of these commands are at $0exx
* drivers/snesmod-1.2.h: added ADSR support, same as the
PitchMod version.

2017-01-05 Augustus Blackheart:
* drivers/supernofx-0.4.h: Saved some bytes in Command_Tempo and
removed high bytes from tables where all routines within a jump
table contained the same high byte (such as S4xTab_H).
* examples/pwm.*: updated with the higher quality samples from
ABNoFX.

More examples are coming, migration to github will happen after more things are fixed. Please let me know of any bugs, I don't use SuperSNESMod and have been meaning to test all the commands to make sure everything is working as expected.

Also, if you are messing around with the filter stuff be careful. Some of the filters require a high echo volume to hear the effect and if you switch from S9C to S9B or D (perhaps other settings??) and you don't lower the echo volume you could be in for a world of pain if the feedback level set high.

The build that b00daw linked below (sent me a static version over IRC, seems to have updated his comment as well) broke an SPC that worked on the release version on the website for snesmod. Samples are messed up (cut short (verrrry short) or non existent) So as of that one it's not functioning as intended.

The patch byte for SuperSNESMod did not get updated in the January version of SuperSNESMod which would have made SPC files completely broken. Other than that, it should work. It does take up many more bytes than the previous version and I never did figure out why the RAM free doesn't display an accurate value. Sometimes I can have 300 bytes free and have no issue and other times I have 700 bytes free and samples are getting cut off. I updated smconv.tar.xz on my website with a fix for SPC conversion and added one noise generation example.

So, I feel I wasted a few hours working on SuperSNESMod. I don't use this driver I don't like the whole ZMODE setup. It solves the issue of keeping compatibility with existing Impulse Tracker modules but it can be very hard to find typos when there are S9x and Zxx commands everywhere.

I want to have something working for people, and I think the best way forward is to start all over from the PitchMod sound driver and start adding in ABNOFX/SuperSNESMod commands one at a time. This will allow me to test things more fully. Also, I want to ditch as much as possible the ZMODE thing. This means overwriting existing IT commands. To me, it's more important to have something usable than worrying about supporting IT commands. (And I this is less of a pain for me because all of my old songs are in XM format and many were converted from Amiga mod formats so I'm not losing anything. Anyway, conversion could still be made to the SNESMod or PitchMod sound driver with little worry.)

For example, the ABNOFX driver does not have support for Channel Volume, Panning Slide... the Tremor command is used to set the feedback level...

Alternately I may just use the ABNOFX driver and swap a couple of commands and add some features back in. Since I already know that all the commands work as expected... But I'd like to get an idea of what commands are the least useful/interesting to you for SPC songs before I make a decision either way.

On the tracker side the idea is to take SchismTracker, (or another IT tracker??), and have a SNESMod mode, which would ignore the SPC specific commands completely when enabled. (Better yet: SPC700 playback!). I have done this with a very buggy XM Unix-y tracker but it would be best to have something cross platform. (Also, less buggy!).

This would not have any impact on the existing SNESMod/Pitchmod sound drivers which do not have a lot of SPC specific commands.

Too bad we know that SPC is a pretty limited format (at 64KB max.) We should likely focus on a sound driver that is completely filled to the brim with all possible effects and abilities of the SPC700 and SNES/SFC hardware. The sample data and pattern data could simply be streamed into ARAM and bankswitched; and then exported as *.SFC and *.ASM. The max ROM export could be between 6MB (FastROM) and ~12MB (standard.)

So far it's apparent that even you, Augustus, get tired of writing very pretty loops and running out of space. ;)

If we are truly doing a SNES/SFC format battle, SPC is not an adequate representation of what can be done with the hardware. Seemingly we are in an SPC battle instead. ;P

@b00daw - That's an interesting idea. I also like KungFuFurby's idea of relocatable SPC700 code which drops code for unused commands based on what the selected song requires or uses different code for the same command based on certain parameters.

@puke7 - If nothing else there's room to add tremor to SNESMod and Pitchmod it doesn't take up too many bytes.

@AugustusBlkheart - Making SPCs still has screwy samples with a fresh compile of your latest SNESMOD with all other drivers except for SuperNoFX now. Looks like the patch byte as you say is in there and the .H files have been updated with "bin2h". Might need to look into something else. I compared the sources but am not versed enough in SNES at the moment to be of aid.

Sidenote:

Adding this to the "Makefile" makes DLL independent executables in Windows:

"LDFLAGS := -static-libgcc -static-libstdc++ -static -lpthread"

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

If people want to play around with SNESMOD as-is, make sure to add "-d supernofx" within the command line; for example: "smconv -d supernofx mysong.it"

The issue with SNESMod and PitchMod having cut off samples was because I moved the progam base address from $400 to $3c4 in an attempt to not waste 60 bytes. This works fine if you are building a ROM and I confirmed the test on real hardware. However, no SPC player that I tested it on would play if back properly unless the program base address was $xx00 or $xx80.

I added ROMs and SPCs for testing using base address $3c4 and $400, as well as a synth-y noise example. I have changed the program base address back to $400 for SNESMod and PitchMod.

2017-03-09 Augustus Blackheart:
* drivers/pitchmod-1.2.h, drivers/snesmod-1.3.h: moved driver
base from $3c4->$400. Using address $3c4 saved 60 bytes and
worked when building a ROM (tested on hardware), however, this
broke playback on every single SPC player I tried it on.

Thanks to b00daw and Savestate for letting me know SPC playback
was broken.

* examples/driver-base-test: SPC and ROM for testing purposes.

* examples/noise-example2*: Cheap-o Roland Juno 60 wanna-be
example.

* doc/ChangeLog: No more time travel.

2017-03-08 Augustus Blackheart:
* Oops, forgot to update the patch byte for SuperSNESMod
SPC during the last update. Thanks, b00daw.

* examples/noise-example1*: Noise hi-hat and snare drum example.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

EXE has been UPX'd at 9 to make it a little smaller. Modern, paranoid browsers freak out over unfamiliar domains, filenames, and compressed EXEs. It's clean. ;)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Notes:

Seems that Noise only works on SuperNoFX and ABNoFX. Your readme says that it should work on PitchMod too.

Is there documentation for ABNoFX anywhere? I don't even see you including the source aside from the *.H files?

Noise works on PitchMod, but only S1x & S2x. There is no documentaion for ABNoFX because it isn't finished and other commands need to be swapped to be like the SNESMod commands (low number enables an effect, high number disables it; by the time I noticed I had switched the order I already had 90 songs written with it).

I'm having a difficult time making test songs which contain a lot of clicking in them. If anybody has made songs with SNESMod and there was a lot of clicking at the beginning of samples or with volume slides can you please post a link to the source .it file so I can try fixing the issue. I'm not sure what I'm doing differently to not have so much clicking going on, but I'd like to fix this as I've noticed it in many SNESMod songs posted here. It quite frankly makes SNESMod sound embarrassing compared to other sound drivers.

Update: The song has considerably less clicking in Mukunda's XM driver so that gives me something to work with. It's odd considering how he wrote both drivers that the newer driver would be so much worse in this area.

I sometimes manually hack in an 8-sample fade into some of my samples if I notice the startup being particularly bad. Actually, you can in theory manually fade in samples from zero via the gain (and a quick fade), for another possibility...

Most of the drivers are unsuitable for games. In order to add more features I pulled out support for sound effects. Only the SNESMod and PitchMod drivers offer support for sound effects*. However, my thinking has always been there's no need to be limited to a single sound driver within a game or project. You can always use CMD_RES to remove a sound driver and then proceed to load another one.

. Should b00daw or anybody build a windows binary I'll add it to the archive.

The most recent version has "Celes" which repurposes many IT commands for other purposes. It also has updates suggested by KungFuFurby for fixing sound effects on PAL machines. I do still need to make some updates to SuperNOFX.

*I sometimes do sound effects by loading a module where each pattern has a sound effect on one or two channels. When I need to play a certain sound I jump to the pattern number which contains the needed effect. Of course this means I can only have sound effects or music, not both at the same time. I tend to use this when I want to use a simple sample and create NES like sound effects.