CHIPNSFX is a musical software suite focused on lightweight code and data (the player itself is under 950 bytes long, and can be as small as 550 bytes) for the Amstrad CPC, Sinclair Spectrum 128 and MSX1 platforms; other hardwares can be supported with minor modifications in the player code, such as Sega Master System. The tracker can create songs up to 256 patterns long, patterns can be up to 96 ticks long, and there can be as many as 255 different instruments. The player itself is hardware-independent, the programmer can provide the external functions required to make it work on any Z80-based platform. CHIPNSFX was succesfully used in past projects such as "CNGTRO #1", "Justin", "Bubble Bobble for CPC", "Frogalot", "Hire Hare", "Duck Out", "Basket Cases", "The Adventures of Timothy Gunn"... and hopefully many more future projects to come.
20190326: modified vibrato and glissando parameters so they can reach even deeper extremes. Many songs need edits to fit the new values: old 1XF is equal to new 1XD. Added ASHTRAY.CHP, MYSTICAL.CHP, THINGSPR.CHP and ZYNAPS.CHP, merged RTS-25-51HZ.CHP into RTS-1998-9.CHP.
20190210: minor source cleanup. Removed optimisation from CPC player: it struck the tape relay. Added AMAUROTE-L.CHP, ARKA1C64.CHP, COBRAC64.CHP, E-MOTION.CHP, GAUNTLET.CHP, KILLRING.CHP, MICROMUS.CHP, PLATOON0-4.CHP, TOUR91.CHP and VIKINGS.CHP.
20181109: 28th public release. Major changes in the tracker and the player: octaves above 8 are no longer valid (C-B becomes C-9), pattern length was raised from 96 to 128, and new special note "===" ("brake", key A by default) switches the volume envelope off and on. Multiple consistency bugfixes: playback within the tracker now fits the player's timings (such as ensuring that portamentos are obeyed since the first tick rather than one tick later). Command line is more strict, such as "chipnsfx -w song.chp" raising an error because there's no "output.wav" parameter. -X shows hexadecimal volumes during playback. Removed linear amplitudes (nobody was using them) and changed -T to behave like -t and raise an error if timings cannot be simplified, in the same fashion -R is a strict version of -r; -N N now sets the transposition rather than the old -T N. Added a compile time flag (TEMPOLESS) to the player that removes tempo handling and reduces footprint but songs require -T when generated. Merged GETOPT--.H within CHIPNSFX.C. Added BALLBRKR.CHP, BB128K-0-3.CHP, BRAVSTAR.CHP, CATABALM.CHP, IKARIWAR.CHP, LITECORE.CHP, COMMANDO-T.CHP, GUNFRITL-M.CHP, MAGICJS1-2.CHP, RESCATLB.CHP, SPOTS94A-B.CHP, STARION1.CHP, STORMLRD.CHP, TECHTED3.CHP, THANATOS.CHP, VICTROAD.CHP and WHERTIME.CHP.
20180910: minor patch adding a workaround for YM3 output to be fully compatible with the old but still widespread ST-SOUND 5.51 and applying the current transposition to the sounds played when typing notes. Added BLKLMPZX-Y.CHP and MOUNTMIK.CHP.
20180822: minor patch adding colons to player source to ease assembly. Target INCLUDE can be "-" (standard output) and can be pipelined. Illegal notes ("C-A") are filtered. Added AUFMONTY-Z.CHP, FERNANDZ.CHP, FROSTY.CHP, LINEFIRE-F.CHP, VINDITR1-4.CHP, XOR.CHP and ZAPTBALS.CHP.
20180808: 27th public release. Special case "[1x] A 2x B 1x C" produces the output "[1x] A B 128 C", saving one byte. Consistency fixes: typing a silence zeroes its instrument, Control-E shows valid messages and Control-Shift-D won't erase empty instruments. Inserted two optional features (disabled by default with "IF 0" preprocessing statements) in tracker and player sources: exact portamento (instead of quick 'n dirty calculation) and half vibrato (whereby X0/X8 plays two steps N N+1/N-1 instead of the usual four steps N N+Y N N-Y). Added a paragraph about reentrancy to the documentation. Added BATMAN10-36.CHP, BEVERLYH.CHP, BOBO0-6.CHP, BUMPY.CHP, CRAZYCM1-2.CHP, DEFCOM.CHP, DRLAIR10-29.CHP, FIRELORD-E.CHP, FUMIGATR.CHP, GRYZOR1-2.CHP, GUILTELL.CHP, IMPOSSML.CHP, LEVIATHN.CHP, MARACAIB.CHP, MATCHDY2.CHP, MAZEMANJ-L.CHP, OCTOPLEX.CHP, OPTBOLT0-2.CHP, OPWOLF0-3.CHP, PROHIBIU.CHP, RAMBO30-2.CHP, RAMPAGG.CHP, ROBIN.CHP, RENEGA30-8.CHP, ROBOCOP0-3.CHP, ROBOTCP0-3.CHP, SHINOBI0-9.CHP, SIDEWALK.CHP, SKATECRZ.CHP, SOLO.CHP, STIFFLIP-Q.CHP, SUBBUTEO.CHP, SUPRTRPR.CHP, SUPSTOCK.CHP, TRIGGER.CHP and TT-RACER.CHP: 512 sample songs!
20180614: minor patch fixing a dangerous bug in Control-Shift-T/G, improving the compression analysis performed by the -t option, and allowing SPACE to set an instrument on whole patterns within the order list. Added BRONX.CHP, CYBERBIG.CHP, MORYFIL1.CHP, SHARRIR1-3.CHP, SPIPEL20-4.CHP, URIDIUM.CHP and VIXEN.CHP.
20180524: 26th public release. Control-Shift-T/G moves items to the top or the bottom of their lists. Songs are read-only during playback (to avoid accidents) if the cursor follows the playback (-P flag or Control-P). Reduced potential noise when launching the tracker during heavy multitasking. Wrote an example of "writepsg" for MSX. Added DYNADUO1-3.CHP and VAMPIRE1-4.CHP: 400 sample songs.
20180517: minor patch making the player two bytes shorter, and adding flag +32 (UNLOOPED) to disable loop logic, matching the the -R flag. Added AVENGER.CHP, BEACHBUG.CHP, BRNBLL-N.CHP, CAMPEONE.CHP, DUSTIN.CHP, ELEVATOR.CHP, GBASKET.CHP, GEOFFCS1-6.CHP, HAMMRBY1-4.CHP, HUNDRA.CHP, MASK1-2.CHP, PHOBOS-N.CHP, PSYPIGSU-W.CHP, STAINLES.CHP, TRAILBLY.CHP and ZONETROP-Q.CHP.
20180514: minor patch making several strings static to save space and fixing several inconsistencies between code and comments. The jukebox features an optimisation described by Targhan at memoryfull.net. Macros were moved outside CHIPNSFX.I80 to ease compatibility beyond UZ80.
20180513: first anniversary special release! Tweaked the tracker playback again, merged MEGAPHNV+W.CHP and added AFTERWAR.CHP, AMC1-2.CHP, FMBASKT1-2.CHP, NONAMED.CHP and SPTENIS1-3.CHP: 365 sample songs in total, one for each day in the year! Bonus: tracker source!
20180510: minor patch fixing a bug storing useless instrument data on empty notes. Made tracker playback slightly softer to avoid noise in some computers. Added C64-180A-C.CHP, COMBASC1-2.CHP, DESPERA3.CHP and GUNFRITF-K.CHP.
20180505: 25th public release. Changed vibrato and glissando scale from 1,2,3,5,7,9,11 (gaps 1,1,2,2,2,2) to 1,2,3,5,7,11,15 (1,1,2,2,4,4): songs such as PACMANI1.CHP sound closer to their models. Inverted roles of -r and -R flags to match other options' behavior. Added DROIDS.CHP, GLIDERDR-S.CHP, GUNFRITE.CHP, HATTRICK.CHP, MEGAPOCL.CHP, MEGAPHNV.CHP, PINKPANT-PNTH.CHP and PROHIBIT.CHP, plus CHIPNSFX.TZX for Spectrum.
20180426: minor patch fixing a bug when using the -T option and saving or reloading a song. Added CHAINRCT.CHP, MELTDOWN.CHP and WARHAWK.CHP.
20180417: 24th public release. Ditched the last remainder of AS80 compatibility: player code, song headers and calls expect "$" to stand for the current target address rather than the current line's target. The assembler UZ80 has been modified accordingly. UPDATE: output uses colons rather than semicolons; using other assemblers than UZ80 doesn't require "sed -i s/;/:/g filename" any longer. Added ARKOID2A-E.CHP.
20180414: minor patch with slight tracker speed and size optimisations: source is 96k, binary is 62.5k. Added CHIMERA1-2.CHP, CPC-1942-3.CHP and TNZS1-6.CHP.
20180408: 23rd public release. Completely rewritten INCLUDE output: BOSCONIA.CHP no longer generates corrupt data, overall compression is slightly better. Added BEACHBUG.CHP, BOSCONIB.CHP, DYNADAN1.CHP, IBALL2ST.CHP, NINJSCTR.CHP, POGOLYMP.CHP and TURBOGRL.CHP.
20180326: minor patch removing redundant conditions in the player. Added PACMANI0-3.CHP, MUTANZO1-2.CHP, SOLNEGRO-P.CHP and SOLOMON4.CHP.
20180324: minor patch fixing a rare bug when instrument noise is XX80. Added CHICAG30.CHP, DARKFUSN.CHP, DTHWISH3.CHP, LEDSTORM-O.CHP, NORTHST1-2.CHP, PODEROSC.CHP, RASTRSCN.CHP, SAVAGF.CHP, SAVAGG.CHP, SLNTSHDW.CHP, TROLL1-3.CHP and TUAREG.CHP.
20180305: minor patch fixing a bug in the -t option that failed to handle several cases. Added COSTACP1-2.CHP, EXTRMNTR.CHP, JSW1-2.CHP, MANICMN1-2.CHP, MRWINO.CHP, NEMESTWL.CHP, PUZZNIC1-2.CHP, STARBOWL.CHP, TANGRAM1-2.CHP, TECHTED1-2.CHP and TITANIC.CHP.
20180220: 22nd public release. Added command line parameter -U to enable manual undo/redo behavior (rather than the old automatic mode) and -t to abridge output timings when feasible; deep vibratos and glissandos (4/5/6/7) are deeper now (5/7/9/11). Added AMC0.CHP, AMC3.CHP, AMC4.CHP, BMXSIM1.CHP, BMXSIM2A.CHP, BMXSIM2B.CHP, BMXSIM2C.CHP, DALEYTOC.CHP, DRGNINJA.CHP, ELEKTRAG.CHP, ELIMNTR3.CHP, ESPADA.CHP, HATE-AST.CHP, KRAKOUT.CHP, KRAKOUU.CHP, LORNA.CHP, NINELIVE.CHP, NINELIVS.CHP, SAVAGE.CHP and SHRTCRCT.CHP.
20180128: minor patch extending the new wavelengths to the player. Added DOORDOOM.CHP, DRAZEN64-5.CHP, MRHELI.CHP, POOGABOO.CHP and WHOPPERC.CHP.
20180123: minor patch featuring slightly finer wavelengths during note playback. Added HELTERSK.CHP, HISTEEL1-2.CHP, PREHIST0-3.CHP, RAMPAGE-F.CHP, SWTCHBLD-E.CHP and VIAJECEN.CHP.
20180117: minor patch setting the instrument duplication shortcut to Control-Shift-E to match its pair Control-Shift-D and avoid accidents. Added SABOTUR1-2.CHP and THUNCATS.CHP.
20180113: minor patch further improving compression of single-note patterns and extending the logic of Control-D, Control-E and Control-W to entire selections rather than just the current pattern; Control-E can duplicate instruments, too. Added BOSCONIA.CHP, FOTYEAR1-2.CHP, GNG0-2.CHP, LAZRTAG1-2.CHP and LINEKER1-2.CHP.
20180111: 21st public release. Fixed the file dialog (it crashed if it had to show more than 256 entries). Control+F5 starts playback at the looping point. Slightly better compression when one pattern shows in a long string and nowhere else. Added ADDAMSF0-3.CHP, ARKANO-Z.CHP, CMDTRACR.CHP, DELTA-IN.CHP, DELTA-SL.CHP, DELTA-ZK.CHP, HOPRCOPR.CHP, HYPERBWL.CHP, ROCKNRLR.CHP, METROCRT-U.CHP and QUARTET6.CHP.
20180101: minor patch making the parameter panel more intuitive to navigate (Left/Right to choose element, Up/Down/Page Up/Page Down to set its value) and moving -P and -Z runtime toggling to Control-P and Control-F respectively, at least temporarily. Added ARKANOIE-H.CHP, GEOFFSC1-6.CHP, METROCRS.CHP, NEBULUS.CHP and ROBOCOP1.CHP. Rewritten the paragraph about "writepsg" and fixed the Spectrum 128 example (one POP AF too many). Extended parsing of parameter "-B: -B1 -B8- -B3" can be written as "-B18-3".
20171228: minor patch with a new parameter -n N that sets how many loops must be exported to a WAVE or YM3b file. Added ARKANO-M.CHP, F_O_F_T_.CHP, GALAX_3D.CHP, GNG2-ALT.CHP and HEADHEEL.CHP.
20171223: twentieth public release. Added glissandos and inverted behavior of vibratos to provide consistency within all effects (high values are treble, low ones are bass). Inverted compile time flag +4 (ABRIDGED) on player (extended mode is enabled by default rather than disabled) and added flag +16 (SLIDELESS) to support all effects but portamentos and glissandos. Ctrl-W in parameter panel applies the global portamento to every order in the list. Added FOTYEAR1-2.CHP, BOSCONIA.CHP, MAZEMANI.CHP, MUNSTERS.CHP and POWERPLY.CHP.
20171215: minor patch fixing vibratos when the wavelength (1MHz) is between 256 and 512 (several songs needed artificially heavy vibratos before the fix), and improving compression by detecting and avoiding false positives; added ARKANOID.CHP (it also plays within the demo), CHARDESI.CHP, MERMAID1-5.CHP and WECLMANS-T.CHP.
20171214: nineteenth public release. When redundant, INCLUDE output skips SFX information on noise-only notes, resulting in shorter data. Parameter panel shows a dynamic volume meter during playback. Added FEUD1-2.CHP, MONTYRUN.CHP, ONEMANDR-S.CHP and SCUMBALL.CHP.
20171208: minor patch allowing longer title and description strings and accepting keys O, S and J as synonyms of Y on "yes/no" questions. Added BEYNDIP1-2.CHP, CRAFTON1-2.CHP, GONZALZ1-4.CHP, JUPITERP.CHP, MASK3.CHP, SEPULCRI.CHP and ZUB1-7.CHP.
20171206: minor patch fixing a bug where instrument tests got stuck rather than being played only on a keypress. Added NEVERS-S.CHP.
20171205: eighteenth public release. Patterns no longer must begin with a note or a silence: internal opcode 128 handles unused space and is more efficient than using a portamento or a modified instrument to handle extremely long notes: compiling COSANOST.CHP went from 422 to 418 bytes, and BURNINR1.CHP from 766 to 728. Command line parameter -B7..B9[-] sets the order of channels in INCLUDE output. Fixed a bug that kept instruments from being played when typing notes on a score or testing them on the instrument panel.
20171203: minor patch that allows toggling the -P and -Z parameters during runtime with F9+Tab and F9+Shift+Tab, and which handles more correctly the order list length and looping points when inserting or deleting patterns in all the channels at once.
20171201: seventeenth public release. Extended -R to look for loops in reverse, compressing even further, and added -Z for rectangle waves instead of square. Fixed a player bug hurting noise-only note C-B with heavy arpeggios or transpositions. Added AVENGER.CHP, ELIMNTR0-2.CHP, HOTSHOT.CHP, PERICODG.CHP, SLAPFITE-F.CHP and SORCERY.CHP.
20171125: minor patch adding the command line parameter -R to scan and compress outside the patterns rather than both inside and outside. Fixed a crash on Windows 10. Added QUARTET4-5.CHP and YOGIBEAR.CHP.
20171124: sixteenth public release. Improved compression to handle repeated strings of patterns if their contents aren't already packed. Added arpeggio special case D (+24) with just one more byte of code. Added ABADIA1-3.CHP, CORSARI1-2.CHP, SOLOMON3.CHP and STARDUST.CHP.
20171118: minor patch fixing minor noise in playback of almost mute amplitudes and formally setting arpeggio case E to stand for -24, way more useful than -13, and only requiring three bytes of code in the player. Added INSIDOUT.CHP and MEGAPHNW.CHP.
20171115: fifteenth public release. Fixed amplitude errors in normal (random crackles) and linear (heavy noise) modes. Added (in several cases retroactively) BLACKBRD.CHP, CAULDRN1.CHP, COLISEUM.CHP, KONGSTCK.CHP, LIVISTN1-2.CHP, M_U_L_E_.CHP, MADMIXG0-2.CHP, TOOBIN_1-5.CHP and UNTOUCH0-7.CHP.
20171109: minor patch fixing a mistake in the order list (INSERT and DELETE were moving the end of the song when they weren't supposed to) and another one in the tracker's vibrato (internally limited to 7 steps rather than 15). Added GOODY.CHP and SIRWOOD.CHP.
20171104: fourteenth public release. Consistency fixes: arpeggio cases E + F stand for -13 + -12 both in the tracker and the player; Alt+F4 equates to ESCAPE; pushing INSERT or DELETE on the order list only affects the currently selected channels rather than all at once. Added BLKLMPSV.CHP, MYTHOS.CHP and ULISES.CHP.
20171002: minor patch restoring proportional vibrato adjustment, overwritten by the new signed vibrato featured in the past release.
20170930: thirteenth public release. Pushing SPACE in the instrument panel plays A-n (where n is the current octave) rather than A-4. New vibrato special case: values X8-XF generate a negative depth vibrato. Control-A/Q works on parameter panel. Added BLKLMP64-65.CHP.
20170918: minor patch fixing a bug in Control-Shift-U when dealing with extreme positive or negative order transposition values, and adding BLKLMPST.CHP, BLKLMPSU.CHP and TRANSMUT.CHP.
20170916: minor patch extending the behavior of Control-Shift-U to cleaning order transpositions up, fixing an old bug in the INCLUDE output and a new one in the extended player, and adding SHOCKWYR.CHP.
20170914: twelfth public release. Command line options allow "getopt" syntax: for example, "-a -b -c" can be shortened to "-abc"; flags -b1..-b6 are now -B1..-B6, in uppercase. Improved the player's support of multiple channels playing noise at once, thus solving the glitches in BURNINR1.CHP and other songs. Added INDIANA3.CHP and JACKNIP2.CHP.
20170911: minor patch fixing a bug in the extended player and adding VERMINT1-3.CHP.
20170909: eleventh public release. New special case for instrument noise: XX80 plays noise XX only at the beginning of the note, then disables the noise signal; the player's extended mode has been updated accordingly. New command line flags -b4, -b5 and -b6. Moved Control-P to Control-B and added Control-U (song optimisation and cleanup). New CAULDRN2.CHP, EQUINOX.CHP, HATE.CHP, LASTMISN.CHP, MOT1-3.CHP, RESCATLA.CHP, RTS-25-27HZ.CHP, RTS-50-52HZ.CHP, SHADSKIM.CHP, TRAILBLZ.CHP, WELLSNFG.CHP, WINGSOD5.CHP and ZONA0.CHP: 85 songs.
20170814: minor patch extending Control-A/Q to the instrument panel.
20170813: tenth public release. New command line options -a (append) and -Q (enable oversampling). Fixed two bugs in INCLUDE file output: instruments setting secondary parameters at the end of the song didn't reset them after looping back to the beginning, and song loop could be lost if within a compressed string. The arpeggios' special case F is now universal instead of limited to extended mode. New BURNINR2-3.CHP, ARMYMOV1-2.CHP, METROPLS.CHP, MYHERO_1-5.CHP, NAVYMOVS.CHP, RENEGA10-19.CHP, THUNDRBD.CHP and XENON1-3.CHP: 65 songs.
20170731: ninth public release. New special case for arpeggios: the nibble F stands for -12 and changes the loop behavior. Sound playback is now wavelength-based rather than frequency-based, and thus closer to the hardware. Minor bugfixes in the keyboard map handling. Added CHUBBYGR.CHP, CHUBBYGS.CHP, MEGAPHNX.CHP and MEGAPHNY.CHP.
20170724: eighth public release. Fixed a serious bug in the noise generator: playback and WAVE output randomly skipped pure noise notes. New ATEAM.CHP, BURNINR1.CHP, BURNINR4.CHP, SOLOMON2.CHP, UNDERWTR.CHP, WESTBNK1.CHP, WESTBNK2.CHP and WINGSOD4.CHP: 32 sample songs.
20170719: seventh public public release. New extended tremolos (60-9F) lead to important changes in the amplitude effect byte: old 60-6F become 5F, old 80 becomes 9E, old 81-8F become 61-6F, old 90-9F become A0; 70-7F stay as they were. Minor optimisations in the player. New command line options -b1, -b2 and -b3. New CATABALL.CHP, FREDDY_H.CHP, HYDROFOL.CHP and SCOR3020.CHP.
20170708: revised sixth public release, with just one change: pressing backspace in order list panel updates pattern panel.
20170707: sixth public release. New command line options -y and -Y (generate YM3 file, either full song or song loop), commands Control-W (apply transposition to current pattern), Control-D (detect duplicates and optionally erase them), Control-E (check for duplicates and optionally create them). Minor changes in CHIPNSFX.I80 extended mode vibratos, in the file dialog and the INCLUDE file compression. New DEFLEKTR.CHP, GRANGEHL.CHP, PHANTIS1.CHP, PHANTIS2.CHP, SCOR3020.CHP, THINGBBK.CHP and TIMETRAX.CHP.
20170616: fifth public release. Fixed a file dialog bug reported by Garvalf (who also wrote CHIPNSFX's first new song from scratch), as well as minor internal consistency bugs. Pattern panel allows using Control-D. New ATOMINO3.CHP and DESPERA2.CHP.
20170607: fourth public release. New command Control-D tells whether the current instrument is unused or the current pattern is a duplicate (Shift: erase unused instrument, turn current pattern into a link to the pattern it is a duplicate of). Minor bugfixes: inconsistencies in -P mode and in channel toggling, better compression when generating INCLUDE files, etc. Minor changes in several songs. New DESPERA1.CHP.
20170602: third public release. New command line options -P (cursor follows playback), -k1, -k2 and -k STR (set QWERTZ, AZERTY or custom keyboard map), following a suggestion from Beb.
20170523: second public release. New command line options -F (48000 Hz) and -L (linear amplitude). A blue bar makes the active items stand out. Minor changes in the documentation file.
20170513: first public release of the tracker (binary only, no source code yet because it's pure chaos) and the player (source code and sample binary).