diff --git a/README.md b/README.md index 116d8771..6c62768a 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ check out the [Releases](https://github.com/tildearrow/furnace/releases) page. a - bug/quirk implementation for increased playback accuracy through compatibility flags - VGM export - modular layout that you may adapt to your needs -- audio file export - entire song, per system or per channel +- audio file export - entire song, per chip or per channel - quality emulation cores (Nuked, MAME, SameBoy, Mednafen PCE, NSFplay, puNES, reSID, Stella, SAASound, vgsound_emu and ymfm) - wavetable synthesizer - available on wavetable chips @@ -237,7 +237,7 @@ yup, it's real. > where's the manual? -see [papers/](papers/doc/README.md). it's kind of incomplete, but at least the systems (sound chips) section is there. +see [papers/](papers/doc/README.md). it's kind of incomplete, but at least the sound chips section is there. > it doesn't open under macOS! @@ -263,7 +263,7 @@ also provided are two effects: - `4xxx`: set fine cutoff. `xxx` range is 000-7ff. additionally, you can change the cutoff and/or duty as a macro inside an instrument by clicking the `absolute cutoff macro` and/or `absolute duty macro` checkbox at the bottom of the instrument. (for the filter, you also need to click the checkbox that says `volume macro is cutoff macro`.) -> how do I use PCM on a PCM-capable system? +> how do I use PCM on a PCM-capable chip? two possibilities: - the recommended way is by creating the "Sample" type instrument and assigning a sample to it. diff --git a/papers/doc/7-systems/README.md b/papers/doc/7-systems/README.md index 080e7269..1fd01c96 100644 --- a/papers/doc/7-systems/README.md +++ b/papers/doc/7-systems/README.md @@ -1,22 +1,20 @@ -# systems +# sound chips -this is a list of systems that Furnace supports, including each system's effects. +this is a list of sound chips that Furnace supports, including each system's effects. -- [Sega Genesis/Mega Drive](genesis.md) -- [Sega Master System](sms.md) +- [Yamaha YM2612](ym2612.md) +- [TI SN76489](sms.md) - [Yamaha OPLL](opll.md) - [Game Boy](game-boy.md) - [PC Engine/TurboGrafx-16](pce.md) - [NES](nes.md) - [Commodore 64](c64.md) -- [Arcade (YM2151/PCM)](arcade.md) +- [Yamaha YM2151](ym2151.md) +- [SegaPCM](segapcm.md) - [Neo Geo/YM2610](ym2610.md) - [Taito Arcade/YM2610B](ym2610b.md) - [AY-3-8910](ay8910.md) - [Amiga](amiga.md) -- [Yamaha YM2612 standalone](ym2612.md) -- [Yamaha YM2151 standalone](ym2151.md) -- [SegaPCM](segapcm.md) - [Capcom QSound](qsound.md) - [Atari 2600](tia.md) - [Philips SAA1099](saa1099.md) diff --git a/papers/doc/7-systems/amiga.md b/papers/doc/7-systems/amiga.md index cbc73f7a..41911445 100644 --- a/papers/doc/7-systems/amiga.md +++ b/papers/doc/7-systems/amiga.md @@ -6,10 +6,10 @@ in this very computer music trackers were born... # effects -- `10xx`: change wave. - - only works when "Mode" is set to "Wavetable" in the instrument. +- `10xx`: toggle low-pass filter. `0` turns it off and `1` turns it on. - `11xx`: toggle amplitude modulation with the next channel. - does not work on the last channel. - `12xx`: toggle period (frequency) modulation with the next channel. - does not work on the last channel. -- `13xx`: toggle low-pass filter. `0` turns it off and `1` turns it on. \ No newline at end of file +- `13xx`: change wave. + - only works when "Mode" is set to "Wavetable" in the instrument. diff --git a/papers/doc/7-systems/arcade.md b/papers/doc/7-systems/arcade.md deleted file mode 100644 index dc9496e6..00000000 --- a/papers/doc/7-systems/arcade.md +++ /dev/null @@ -1,32 +0,0 @@ -# Arcade (Yamaha YM2151/PCM) - -this chip combination was used in the Sega OutRun, X and Y arcade boards, and perhaps a few others. -the actual PCM chip had 16 channels, but the number has been cut to 5 in DefleMask for seemingly arbitrary reasons. - -# effects - -- `10xx`: set noise frequency of channel 8 operator 4. 00 disables noise while 01 to 20 enables it. -- `11xx`: set feedback of channel. -- `12xx`: set operator 1 level. -- `13xx`: set operator 2 level. -- `14xx`: set operator 3 level. -- `15xx`: set operator 4 level. -- `16xy`: set multiplier of operator. - - `x` is the operator (1-4). - - `y` is the mutliplier. -- `17xx`: set LFO speed. -- `18xx`: set LFO waveform. `xx` may be one of the following: - - `00`: saw - - `01`: square - - `02`: triangle - - `03`: noise -- `19xx`: set attack of all operators. -- `1Axx`: set attack of operator 1. -- `1Bxx`: set attack of operator 2. -- `1Cxx`: set attack of operator 3. -- `1Dxx`: set attack of operator 4. -- `1Exx`: set AM depth. -- `1Fxx`: set PM depth. -- `20xx`: set PCM frequency. - - only works on the PCM channels. - - `xx` is a 256th fraction of 31250Hz. diff --git a/papers/doc/7-systems/genesis.md b/papers/doc/7-systems/genesis.md index 13ce5ab9..3350a6ea 100644 --- a/papers/doc/7-systems/genesis.md +++ b/papers/doc/7-systems/genesis.md @@ -2,7 +2,7 @@ a video game console that showed itself as the first true rival to Nintendo's video game market near-monopoly in the US during the '80's. -this console is powered by two sound chips: the Yamaha YM2612 and a derivative of the SN76489. +this console is powered by two sound chips: the [Yamaha YM2612](ym2612.md) and [a derivative of the SN76489](sms.md). # effects diff --git a/papers/doc/7-systems/segapcm.md b/papers/doc/7-systems/segapcm.md index 36462633..7bd45f5b 100644 --- a/papers/doc/7-systems/segapcm.md +++ b/papers/doc/7-systems/segapcm.md @@ -6,6 +6,10 @@ yep, that's right! 16 channels of PCM! a chip used in the Sega OutRun/X/Y arcade boards. eventually the MultiPCM surpassed it with 28 channels, and later they joined the software mixing gang. +# 5-channel SegaPCM + +Furnace also has a five channel version of this chip, but it only exists for DefleMask compatibility reasons (which doesn't expose the other channels for rather arbitrary reasons). + # effects - `20xx`: set PCM frequency. - `xx` is a 256th fraction of 31250Hz. diff --git a/papers/doc/7-systems/sms.md b/papers/doc/7-systems/sms.md index 882085f1..86e04539 100644 --- a/papers/doc/7-systems/sms.md +++ b/papers/doc/7-systems/sms.md @@ -1,13 +1,10 @@ -# Sega Master System +# TI SN76489 (e.g. Sega Master System) -the predecessor to Genesis. +a relatively simple sound chip made by Texas Instruments. a derivative of it is used in Sega's Master System, the predecessor to Genesis. -surely had better graphics than NES, but its sound (fairly weak, 4ch PSG with A-3 is a lowest tone) is subject of several jokes. - -this console is powered by a derivative of the Texas Instruments SN76489. - -the original iteration of the SN76489 used in the TI-99/4A computers was clocked much lower at 447 kHz, being able to play as low as 13.670 Hz (A -1). consequentially, pitch accuracy for higher notes is compromised. +the original iteration of the SN76489 used in the TI-99/4A computers was clocked at 447 KHz, being able to play as low as 13.670 Hz (A -1). consequentially, pitch accuracy for higher notes is compromised. +on the other hand, the chip was clocked at a much higher speed on Master System and Genesis, which makes it rather poor in the bass range. # effects diff --git a/papers/doc/7-systems/ym2151.md b/papers/doc/7-systems/ym2151.md index 2291088e..854a370c 100644 --- a/papers/doc/7-systems/ym2151.md +++ b/papers/doc/7-systems/ym2151.md @@ -4,6 +4,8 @@ the sound chip powering several arcade boards and the Sharp X1/X68000. Eight 4-o it also was present on several pinball machines and synthesizers of the era, and later surpassed by the YM2414 (OPZ) present in the world-famous TX81Z. +in most arcade boards the chip was used in combination with a PCM chip, like [SegaPCM](segapcm.md) or OKI's line of [ADPCM](msm6258.md) [chips](msm6295.md). + # effects - `10xx`: set noise frequency of channel 8 operator 4. 00 disables noise while 01 to 20 enables it. @@ -63,4 +65,4 @@ it also was present on several pinball machines and synthesizers of the era, and - `5Cxx`: set D2R/SR of operator 1. - `5Dxx`: set D2R/SR of operator 2. - `5Exx`: set D2R/SR of operator 3. -- `5Fxx`: set D2R/SR of operator 4. \ No newline at end of file +- `5Fxx`: set D2R/SR of operator 4. diff --git a/papers/doc/README.md b/papers/doc/README.md index 771ea5f1..2bcf6700 100644 --- a/papers/doc/README.md +++ b/papers/doc/README.md @@ -8,7 +8,7 @@ this documentation is a work in progress! expect several sections to be incomple 4. [instruments](4-instrument/README.md) 5. [wavetables](5-wave/README.md) 6. [samples](6-sample/README.md) -7. [list of systems](7-systems/README.md) +7. [list of sound chips](7-systems/README.md) # attribution diff --git a/src/engine/sysDef.cpp b/src/engine/sysDef.cpp index c0006061..404f6405 100644 --- a/src/engine/sysDef.cpp +++ b/src/engine/sysDef.cpp @@ -788,6 +788,7 @@ void DivEngine::registerSystems() { {0x10, {DIV_CMD_AMIGA_FILTER, "10xx: Toggle filter (0 disables; 1 enables)"}}, {0x11, {DIV_CMD_AMIGA_AM, "11xx: Toggle AM with next channel"}}, {0x12, {DIV_CMD_AMIGA_PM, "12xx: Toggle period modulation with next channel"}}, + {0x13, {DIV_CMD_WAVE, "13xx: Set waveform"}} } );