SNESMOD fork by AugustusBlkheart and KungFuFurby
BotB Academy Project Dev
Level 27 Renderist
post #62162 :: 2016.01.13 9:23pm :: edit 2018.08.31 11:14pm
  Tilde, dw-, sleeparrow, Jangler, kinkinkijkin, radian, Sylveon, Savestate and gotoandplay liēkd this
  m9m hæitd this < SNESMOD by Augustus Blackheart, KungFuFurby, and mukunda.

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.

Most recent build:


See posts for changelogs.

Have fun with their hard work!
Level 27 Renderist
post #62360 :: 2016.01.18 7:23am :: edit 2016.01.19 10:06am
  Jangler, kinkinkijkin and KungFuFurby liēkd this
  m9m and GoldenDenis hæitd this
I don't mind making builds on request but this project seems to remain "hyper active!" (I'm just not going to do it constantly!)

Latest changes are:

2016-01-10 Augustus Blackheart <>
* drivers/supernofx-0.2.h: Added noise frequency sweep and the start of
tremolo and panbrello from abnofx driver.
* examples/pause.spc, examples/super-test1.spc, examples/supersnesmod.sfc
examples/tremolo.sfc: updated to latest version of driver
* src/help.h: Updated with the latest info
* src/it2spc.cpp: Updated with latest sound driver. Please see
doc/supernofx-0.2 changes.txt
2016-01-04 KungFuFurby
* drivers/*.h: Surround is now disabled when panning is set via volume


1.) In order to compile this archive simply download the MinGW-w64 enviroment:

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".)

2.) Execute the BAT file.

3.) Traverse to your "Super SNESMod" project directory. (Where you extracted the archive contents. Latest version of WinRAR extracts *.tar.xz perfectly fine.)

4.) Edit the Makefile and remove instances of "-DBOOST"

5.) In the MinGW-w64 command line type "make"

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.

8.) Profit!

Ask me for help or build requests here. :)
Level 27 Renderist
post #77166 :: 2017.01.24 3:43pm
  sleeparrow, Jangler, Savestate and kinkinkijkin liēkd this
  m9m hæitd this

2016-08-29 Augustus Blackheart:
* drivers/supernofx-0.4.h: Added duty cycle code from ABNOFX
* examples/pitchmod_adsr[it|spc]: ADSR example [Pitchmod]
* examples/duty_cycle.[it|spc]: Duty cycle example [SuperSNESMod]
* examples/summer_snapped.sfc: Some stupid songs

2016-08-03 Augustus Blackheart
* drivers/pitchmod-1.2.h: Added the ability to use ADSR instead of
direct gain.

2016-07-30 Augustus Blackheart
* drivers/*.h: Fast linear increase mapped to 126 because 127 is never

2016-07-28 Augustus Blackheart
* drivers/supernofx-0.4.h: only using the channel filter sweep mode for
now, saving a bit of ram.
* src/help.h: Updated help with the latest info.
* doc/supernofx-0.4 changes.txt: Documented command changes from
pervious version.

2016-07-26 Augustus Blackheart
* drivers/ab-spc-0.1.h, supernofx-0.4.h: applied channel filter sweep
fix from ab-sb-0.3.h

2016-04-21 Augustus Blackheart
* drivers/ab-sb-0.3.h: fix channel filter sweep routine (bypass overflow
check if it has been done once and then a channel is skipped)

2016-04-19 Augustus Blackheart
* src/help.h: Updated help with the latest info.
* doc/supernofx-0.3 changes.txt: Documented command changes from
pervious version.

2016-04-15 Augustus Blackheart
* drivers/pitchmod-1.1.h, snesmod-1.2.h: restored accidentally deleted
line "mov y, a ; a = sine[cmem]" in Vibrato routine. Thanks Kung Fu
Furby for pointing this out.

2016-03-25 Augustus Blackheart
* Makefile: -DBOOST is removed as an option by default if the system
detected is MINGW or CYGWIN.

2016-03-26 Augustus Blackheart
* drivers/ab-sb-0.2.h: Fast linear increase mapped to 126 because 127
is never reached.

2016-03-02 Augustus Blackheart
* drivers/*.h: removed duplicate "bra _rnv_set" from Command_RetriggerNote
and fixed sine wave vibrato.
* drivers/supernofx-0.3.h: changed some commands around, added channel
filter sweep, removed old filter sweep routines. Only the channel filter
sweep routine works right now.
Level 17 Chipist
post #77376 :: 2017.01.27 10:06am
  sleeparrow, Dimeback, Savestate, anewuser, Jangler and b00daw liēkd this
I uploaded an update today. SNESMod, PitchMod and SuperSNESMod all use a little less RAM. SNESMod now has ADSR support.
Level 27 Renderist
post #77441 :: 2017.01.27 9:40pm :: edit 2017.01.28 10:38am
  sleeparrow and Savestate liēkd this

| 2017 |

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

2017-01-03 Augustus Blackheart:
* drivers/supernofx-0.4.h: Added code to restore original sample
when wavetable cycle is disabled.


y0, Augustus... Check out your CHANGELOG for the above intended changes. ;)

Also... I don't think your MINGW detection works. I still have to manually remove -DBOOST or supply the Boost library.

Alsox2... Do you mind making more examples of how noise generation works? Kulor and I were stumped on it a few months back. (Couldn't really get a sane sounding output.)

editalsox3... If you threw this up on a github or something, maybe other n00bz could contribute more easily; even like KungFuFurby and bazz. :)
Level 29 Chipist
post #79852 :: 2017.03.06 5:35pm :: edit 2017.03.06 5:37pm
hey boodaw ! can you rebuild it statically?
-static-libgcc -static-libstdc++
the binary is looking for a dll that i don't have
Level 27 Renderist
post #79853 :: 2017.03.06 5:42pm :: edit 2017.03.07 9:05am
the latest version builds fine; but once it's used it messes up the samples. use the older version for now.
Level 29 Chipist
post #79854 :: 2017.03.06 5:51pm :: edit 2017.03.06 5:52pm
i'll probably try my hand at statically building it tomorrow if you don't get around to it
Level 17 Chipist
post #79905 :: 2017.03.07 5:40pm
  puke7, b00daw and Savestate liēkd this
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.
Level 29 Chipist
post #79922 :: 2017.03.08 12:08am
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.

Also github hype!
Level 17 Chipist
post #79941 :: 2017.03.08 11:31am :: edit 2017.03.08 11:32am
  themnotyou, RazerBlue6, b00daw and puke7 liēkd this
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.
Level 28 Hostist
post #79942 :: 2017.03.08 1:35pm
  sleeparrow, themnotyou, b00daw and RazerBlue6 liēkd this
Schism SPC would be dope. Also, tremor effect is one of my favs!
Level 27 Renderist
post #79947 :: 2017.03.08 2:35pm :: edit 2017.03.08 2:40pm
  themnotyou liēkd this
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

Down with SPC! ;X
Level 17 Chipist
post #79952 :: 2017.03.08 3:58pm :: edit 2017.03.09 9:37am
@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.
Level 27 Renderist
post #79962 :: 2017.03.08 8:04pm :: edit 2017.03.08 8:58pm

@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.


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"
Level 17 Chipist
post #80020 :: 2017.03.09 9:34am :: edit 2017.03.09 9:35am
  Savestate and b00daw liēkd this
I updated again, but forgot about adding the LDFLAGS for Windows.

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.
Level 27 Renderist
post #80036 :: 2017.03.09 6:47pm
  Quirby64, sleeparrow and Savestate liēkd this

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

* 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. ;)



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?
Level 17 Chipist
post #80477 :: 2017.03.14 3:17pm
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).
Level 17 Chipist
post #84577 :: 2017.05.23 4:58pm :: edit 2017.05.23 4:59pm
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.
Level 26 Mixist
post #84587 :: 2017.05.23 9:20pm
Dunno if it's the type of clicking you're looking for, but Aurora Surrealis's bassline pops all over the place since it changes volume a ton:

.it source is in the description.
Level 17 Chipist
post #84621 :: 2017.05.24 11:46am
  Xaser liēkd this
That's perfect, and the song is super good so that should help with all the testing. There seems to be noise beyond just the bass but there is a lot of volume stuff happening.

Unfortunately, changing the gain while waiting for the next tick didn't seem to help with the problem. I'll have to play around with the code some more.

Here are some differences to how I approach tracking for SNESMod, I'm not sure if any of these make a difference... if anybody else has done more experimentation let me know.

I always use 16-bit samples, I always ensure the loop width is divisible by 16. I also tend to use quieter samples.

I recall having more issues with noise when using a faster speed but I haven't really messed around with that lately. I usually use speed 5 or 4.

I seem to recall having more issues with waveforms, like what you've used for bass... samples with high positive and high negative values but whose peaks are narrow.

I'm not sure how much any of that might be contributing to some of the clicking. For sure using volume $50 on the odd rows and $20 on the even rows is something SNESMod cannot deal with gracefully.
Level 17 Chipist
post #84636 :: 2017.05.24 4:15pm
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.
Level 27 Chipist
post #84669 :: 2017.05.25 2:13pm
If the resulting BRR data between the SNESMod and XMSNES versions is not identical, then that's another thing to note down...
Level 17 Chipist
post #85206 :: 2017.06.02 6:49pm :: edit 2017.06.02 6:51pm
Yeah, I haven't looked at that yet, but I do know of one difference from when I looked at the waveforms from the two files. XMSNES added 1 brr block of silence to the beginning of all of the samples.

I have little time these days but am hoping for a few hours to prepare the next update.
Level 27 Chipist
post #85208 :: 2017.06.02 7:20pm :: edit 2017.06.03 4:28am
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...
Level 28 Chipist
post #87506 :: 2017.07.08 4:50am
  Savestate liēkd this
"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."

I probably won't be able to put in the time for this myself, but if anyone wants to make a GitHub pull request
for a feature like this, I'll happily accept it. (Don't worry about GUI support for it, just make it a config file option.)
Level 0 n00b
post #88396 :: 2017.07.22 3:37pm
How much CPU speed should we designate for sound? For a game, it would be fine doing tracking with the CPU, but for sample generation, it's better not to interrupt gameplay.
Level 17 Chipist
post #93250 :: 2017.12.15 5:31pm
  anewuser and ViLXDRYAD liēkd this
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.

The most recent version of smconv is always
. 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.
Level 27 Renderist
post #96060 :: 2018.02.15 2:34pm
  Xaser and Savestate liēkd this
SNESMOD change log (2017-12-15):

2017-12-13 KungFuFurby:
* drivers/snesmod.asm, drivers/snesmod_standard.asm:
Fix sound effets for PAL machines. To use Add -D PAL to
ASFLAGS in the Makefile for your project.

2017-07-30 Augustus Blackheart:
* drivers/src/mvol-evol-swap.asm: this is code which used
to be in ab-nofx.

2017-04-01 Augustus Blackheart:
* drivers/celes-0.1h: brought ab-fm-nofx out of hiding as

2017-03-30 Augustus Blackheart:
* drivers/supernofx-0.5.h: uncommented wt_min and wt_max
* no need to call _wt_swap_sample, code was placed before
increase check.

2017-03-16 Augustus Blackheart:
* drivers/ab-sb-0.4.h: added FM code from ab-spc to ab-sb.

* drivers/ab-spc-0.2.h: add LFO for modulator's amplitude.

See the top post for the latest build.
Level 16 Chipist
post #104573 :: 2018.10.19 2:05pm
  raphaelgoulart and ipi hæitd this
support tremor
Level 24 Chipist
post #107229 :: 2019.02.07 1:01am :: edit 2019.02.07 1:03am
  raphaelgoulart and kleeder liēkd this
just wanna point out that since is down, so are all the download links

same goes for both documentation links (strobe-hosted is down as well)
Level 31 Chipist
post #107230 :: 2019.02.07 1:53am
  Tilde liēkd this
we've got a serious problem with all these unavailable servers, bots and websites atm :/
Level 17 Chipist
post #123956 :: 2020.07.26 9:36am
  Yung Gotenks, KungFuFurby, Kasran, Tilde, Baron Knoxburry and hanna liēkd this
mlr is back, the person who handled the site died. everything's sorted now.

snesmod/sneskit updates here
Level 27 Chipist
post #124031 :: 2020.07.27 2:33pm :: edit 2020.07.27 6:15pm
  damifortune, Yung Gotenks, Tilde and Baron Knoxburry liēkd this
Whoa. My condolences to the family of the original handler of the site.
Level 12 Chipist
post #127843 :: 2020.10.02 5:10pm
  Xyz and ASIKWUSpulse liēkd this
i couldn't get the fork to work, but in case anyone needs, i built windows + linux binaries of the osoumen version here:
Level 26 Chipist
post #127933 :: 2020.10.04 8:31pm :: edit 2020.10.04 8:32pm
These and you have linked. doesn't work on my x86
Level 26 Mixist
post #127969 :: 2020.10.05 10:39am
the xmsnes binaries I made some time ago with cygwin are x86-64 so they won't work on older processors unfortunately. also seems to be the case for defensemechanism's binaries
Level 26 Chipist
post #128868 :: 2020.10.22 2:10pm :: edit 2021.05.18 7:16am

LOGIN or REGISTER to add your own comments!