Merge branch 'master' into force-critical-input-trickle

This commit is contained in:
tildearrow 2023-08-12 21:52:12 -05:00
commit bbeb3df9f6
189 changed files with 7585 additions and 3187 deletions

View File

@ -507,6 +507,8 @@ src/engine/platform/sound/d65modified.c
src/engine/platform/sound/ted-sound.c
src/engine/platform/sound/c140.c
src/engine/platform/oplAInterface.cpp
src/engine/platform/ym2608Interface.cpp
src/engine/platform/ym2610Interface.cpp
@ -599,6 +601,7 @@ src/engine/platform/sm8521.cpp
src/engine/platform/pv1000.cpp
src/engine/platform/k053260.cpp
src/engine/platform/ted.cpp
src/engine/platform/c140.cpp
src/engine/platform/pcmdac.cpp
src/engine/platform/dummy.cpp

Binary file not shown.

Binary file not shown.

BIN
demos/gameboy/dtect.fur Normal file

Binary file not shown.

BIN
demos/gameboy/freedom.fur Normal file

Binary file not shown.

Binary file not shown.

BIN
demos/gameboy/minos.fur Normal file

Binary file not shown.

BIN
demos/gameboy/spreadtro.fur Normal file

Binary file not shown.

BIN
demos/genesis/mm5_boss.fur Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -20,4 +20,10 @@ it also has a flexible windowing system which you may move around and organize.
see [2-interface](../2-interface/README.md) and [3-pattern](../3-pattern/README.md) for more information.
once familiar with the tracker, look to [9-guides](../9-guides/README.md) for useful techniques.
once familiar with the tracker, look to [9-guides](../9-guides/README.md) for useful techniques.
# links
[Furnace Tutorials](https://youtube.com/playlist?list=PLCELB6AsTZUnwv0PC5AAGHjvg47F44YQ1): video tutorials created by Spinning Square Waves.

View File

@ -13,6 +13,7 @@ primary topics:
- [play/edit controls](play-edit-controls.md)
- [instrument/wavetable/sample list](asset-list.md)
- [song information](song-info.md)
- [effect list window](effect-list-window.md)
- [pattern view](../3-pattern/README.md)
- [instrument editor](../4-instrument/README.md)
- [wavetable editor](../5-wave/README.md)

View File

@ -0,0 +1,10 @@
# effect list window
(for more details about these effects, see [the effects page](../3-pattern/effects.md))
![effect list window](effect-list.png)
this window provides a list of the effects that are available.
- **Chip at cursor**: the currently selected chip. the list only shows available effects for this chip.
- menu button: opens a small list of effect categories. toggle each to change whether they're shown in the list.

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

View File

@ -4,186 +4,169 @@ settings are saved when clicking the **OK** button at the bottom of the dialog.
# General
## General
- **Workspace layout**
- **Import**: reads a .ini layout file.
- **Export**: writes current layout to a .ini file.
- **Reset**: resets layout to default.
### Program
- **Render backend**
- changing this may help with performace issues.
- **Late render clear**
- **Power-saving mode**: saves power by lowering the frame rate to 2fps when idle.
- may cause issues under Mesa drivers!
- **Disable threaded input (restart after changing!)**: processes key presses for note preview on a separate thread (on supported platforms), which reduces latency.
- however, crashes have been reported when threaded input is on. enable this option if that is the case.
- **Enable event delay**
- may cause issues with high-polling-rate mice when previewing notes.
### File
- **Use system file picker**: uses native OS file dialog instead of Furnace's.
- **Number of recent files**: number of files to show in the _open recent..._ menu.
- **Compress when saving**
- uses zlib to compress saved songs.
- **Save unused patterns**
- **Use new pattern format when saving**
- **Don't apply compatibility flags when loading .dmf**
- **Audio export loop/fade out time:**
- **Set to these values on start-up:**
- **Loops**: number of additional times to play through `0Bxx` song loop.
- **Fade out (seconds)**: length of fade out after final loop.
- **Remember last values**
### Chip
- **Initial system**: the system of chips loaded on starting Furnace.
- **Current system**: sets current chips as default.
- **Randomize**: set default to a random system.
- **Randomize**: sets default to a random system.
- this will not choose a random system at each start.
- **Reset to defaults**: sets default to "Sega Genesis/Mega Drive".
- **Name**: name for the default system. may be set to any text.
- system configuration: same as in the [chip manager](../8-advanced/chip-manager.md) and [mixer](../8-advanced/mixer.md).
- **Configure:**: same as in the [chip manager](../8-advanced/chip-manager.md) and [mixer](../8-advanced/mixer.md).
- **When creating new song**:
- **Display system preset selector**
- **Start with initial system**
- **Restart song when changing chip properties**
### Start-up
- **Play intro on start-up:**
- **No**: skips intro entirely.
- **Short**: shows silent title screen briefly.
- **Full (short when loading song)**: shows animated musical intro unless started with a song (command line, double-clicking a .fur file, etc.)
- **Full (always)**: always shows animated musical intro.
- **When creating new song**:
- **Display system preset selector**
- **Start with initial system**
- **Disable fade-in during start-up**
- **About screen party time**
- _warning:_ may cause epileptic seizures.
### Behavior
- **Double-click time (seconds)**: maximum time between mouse clicks to recognize them as a double-click.
- **Toggle channel solo on:** select which interactions with a channel header will toggle solo for that channel.
- **Push value when overwriting instead of clearing it**: in the order list and pattern editors, typing into an already-filled value will shift digits instead of starting fresh.
- if off: moving the cursor onto the value `A5` and typing a "B" results in `0B`.
- if on: with the cursor on the value `A5` and typing a "B" results in `5B`.
- **Move cursor up on backspace-delete**
- **Move cursor by edit step on delete**
- **Change current instrument when changing instrument column (absorb)**
- **Delete effect value when deleting effect**
- **Change order when scrolling outside of pattern bounds**:
- if off, the pattern edit cursor will stay locked within the current order.
- if on, moving the cursor past the edge of the previous or next order will move to that order.
- **Move cursor by edit step on insert (push)**
- **Move cursor to end of clipboard content when pasting**
- **Don't scroll when moving cursor**
- **Double click selects entire column**
- **Allow docking editors**
- **Don't raise pattern editor on click**
- **Focus pattern editor when selecting instrument**
- **Restart song when changing chip properties**
- **Use system file picker**: use native OS file dialog instead of Furnace's.
- **Only allow window movement when clicking on title bar**
- **Enable event delay**
- may cause issues with high-polling-rate mice when previewing notes.
- **Power-saving mode**
- saves power by lowering the frame rate to 2fps when idle.
- may cause issues under Mesa drivers!
- **Disable threaded input (restart after changing!)**
- threaded input processes key presses for note preview on a separate thread (on supported platforms), which reduces latency.
- however, crashes have been reported when threaded input is on. enable this option if that is the case.
- **Remember window position**
- remembers the window's last position on start-up.
- **New instruments are blank**
- **Save unused patterns**
- **Compress when saving**
- use zlib to compress saved songs.
- **Cursor follows current order when moving it**
- applies when playback is stopped.
- **Audio export loop/fade out time:**
- **Set to these values on start-up:**
- **Loops**: number of additional times to play through `0Bxx` song loop.
- **Fade out (seconds)**: length of fade out after final loop.
- **Remember last values**
- **Note preview behavior:**
- **Never**
- **When cursor is in Note column**
- **When cursor is in Note column or not in edit mode**
- **Always**
- **Wrap pattern cursor horizontally:**
- **No**
- **Yes**
- **Yes, and move to next/prev row**
- **Wrap pattern cursor vertically:**
- **No**
- **Yes**
- **Yes, and move to next/prev pattern**
- **Cursor movement keys behavior:**
- **Move by one**
- **Move by Edit Step**
- **Effect input cursor behavior:**
- **Move down**
- **Move to effect value (otherwise move down)**
- **Move to effect value/next effect and wrap around**
- **Allow dragging selection:**
- **No**
- **Yes**
- **Yes (while holding Ctrl only)**
# Audio/MIDI
## Audio
- **Backend**: select SDL or JACK for audio output.
### Output
- **Backend**: selects SDL or JACK for audio output.
- only appears on Linux, or MacOS compiled with JACK support
- **Driver**
- **Device**: audio device for playback.
- **Sample rate**
- **Outputs**: select number of audio outputs created, up to 16.
- **Outputs**: number of audio outputs created, up to 16.
- only appears when Backend is JACK.
- **Channels**: number of output channels to use.
- **Buffer size**: size of buffer in both samples and milliseconds.
- **Quality**: selects quality of resampling. low quality reduces CPU load.
- **Metronome volume**
- **Low-latency mode (experimental!)**: reduces latency by running the engine faster than the tick rate. useful for live playback/jam mode.
- _warning:_ experimental! may produce glitches. only enable if your buffer size is small (10ms or less).
- **Force mono audio**
- **Software clipping**: clips output to nominal range (-1.0 to 1.0) before passing it to the audio device.
- this avoids activating Windows' built-in limiter.
- **want:** displays requested audio configuration.
- **got:** displays actual audio configuration returned by audio backend.
- **MIDI input**
- **MIDI output**
- **MIDI input settings**
- **Note input**
- **Velocity input**
- **Map MIDI channels to direct channels**
- **Map Yamaha FM voice data to instruments**
- **Program change is instrument selection**
- **Value input style**:
### Mixing
- **Quality**: selects quality of resampling. low quality reduces CPU load.
- **Software clipping**: clips output to nominal range (-1.0 to 1.0) before passing it to the audio device.
- this avoids activating Windows' built-in limiter.
### Metronome
- **Metronome volume**
## MIDI
### MIDI input
- **MIDI input**: input device.
- **Note input**
- **Velocity input**
- **Map MIDI channels to direct channels**
- **Map Yamaha FM voice data to instruments**
- **Program change is instrument selection**
- **Value input style**:
- **Disabled/custom**
- **Two octaves (0 is C-4, F is D#5)**
- **Raw (note number is value)**
- **Two octaves alternate (lower keys are 0-9, upper keys are A-F)**
- **Use dual control change (one for each nibble)**
- **CC of upper nibble**
- **CC of lower nibble**
- **Use 14-bit control change**
- **MSB CC**
- **LSB CC**
- **Use single control change**
- **Control**
- **Per-column control change**
- **Instrument**\
**Volume**\
**Effect `x` type**\
**Effect `x` value**
- **Disabled/custom**
- **Two octaves (0 is C-4, F is D#5)**
- **Raw (note number is value)**
- **Two octaves alternate (lower keys are 0-9, upper keys are A-F)**
- **Use dual control change (one for each nibble)**
- **CC of upper nibble**
- **CC of lower nibble**
- **Use 14-bit control change**
- **MSB CC**
- **LSB CC**
- **Use single control change**
- **Use single control change (imprecise)**
- **Control**
- **Per-column control change**
- **Instrument**\
**Volume**\
**Effect `x` type**\
**Effect `x` value**
- **Disabled/custom**
- **Use dual control change (one for each nibble)**
- **CC of upper nibble**
- **CC of lower nibble**
- **Use 14-bit control change**
- **MSB CC**
- **LSB CC**
- **Use single control change (imprecise)**
- **Control**
- **Volume curve**
- **Actions:**
- **`+`** button: adds a new action.
- window-with-arrow button: new action with learning! press a button or move a slider/knob/something on your device.
- each action has the following:
- **Type**
- **Channel**
- **Note/Control**
- **Velocity/Value**
- **Action**
- **Learn**
- **Remove**
- **Volume curve**
- **Actions:**
- **`+`** button: adds a new action.
- window-with-arrow button: new action with learning! press a button or move a slider/knob/something on your device.
- each action has the following:
- **Type**
- **Channel**
- **Note/Control**
- **Velocity/Value**
- **Action**
- **Learn**
- **Remove**
- **MIDI output settings**
- **Output mode:**
- **Off (use for TX81Z)**
- **Melodic**
- **Send Program Change**
- **Send MIDI clock**
- **Send MIDI timecode**
- **Timecode frame rate:**
- **Closest to Tick Rate**
- **Film (24fps)**
- **PAL (25fps)**
- **NTSC drop (29.97fps)**
- **NTSC non-drop (30fps)**
### MIDI output
# Emulation
- **MIDI output**: output device.
- **Output mode:**
- **Off (use for TX81Z)**
- **Melodic**
- **Send Program Change**
- **Send MIDI clock**
- **Send MIDI timecode**
- **Timecode frame rate:**
- **Closest to Tick Rate**
- **Film (24fps)**
- **PAL (25fps)**
- **NTSC drop (29.97fps)**
- **NTSC non-drop (30fps)**
## Emulation
### Cores
- **Arcade/YM2151 core**\
**Genesis/YM2612 core**\
**SN76489 core**\
@ -202,16 +185,124 @@ settings are saved when clicking the **OK** button at the bottom of the dialog.
# Appearance
## Keyboard
- **Render driver**
- **Automatic UI scaling factor**: automatically match the OS's UI scaling.
- **UI scaling factor**: only if "Automatic UI scaling factor" is off.
- **Main font**: if "Custom...", a file path selector will appear beneath.
- **Size**
- **Pattern font**: if "Custom...", a file path selector will appear beneath.
- **Size**
### Keyboard
- **Import**
- **Export**
- **Reset defaults**
- several categories of keybinds...
- click on a keybind then enter a key or key combination to change it
- right-click to clear the keybind
## Interface
### Layout
- **Workspace layout**
- **Import**: reads a .ini layout file.
- **Export**: writes current layout to a .ini file.
- **Reset**: resets layout to default.
- **Allow docking editors**
- **Remember window position**: remembers the window's last position on start-up.
- **Only allow window movement when clicking on title bar**
- **Play/edit controls layout:**
- **Classic**
- **Compact**
- **Compact (vertical)**
- **Split**
- **Position of buttons in Orders:**
- **Top**
- **Left**
- **Right**
### Mouse
- **Double-click time (seconds)**: maximum time between mouse clicks to recognize them as a double-click.
- **Don't raise pattern editor on click**
- **Focus pattern editor when selecting instrument**
- **Note preview behavior:**
- **Never**
- **When cursor is in Note column**
- **When cursor is in Note column or not in edit mode**
- **Always**
- **Allow dragging selection:**
- **No**
- **Yes**
- **Yes (while holding Ctrl only)**
- **Toggle channel solo on:** selects which interactions with a channel header will toggle solo for that channel.
- Right-click or double click
- Right-click
- Double-click
- **Double click selects entire column**
### Cursor behavior
- **Insert pushes entire channel row**
- **Pull delete affects entire channel row**
- **Push value when overwriting instead of clearing it**: in the order list and pattern editors, typing into an already-filled value will shift digits instead of starting fresh.
- if off: moving the cursor onto the value `A5` and typing a "B" results in `0B`.
- if on: moving the cursor onto the value `A5` and typing a "B" results in `5B`.
- **Effect input behavior:**
- **Move down**
- **Move to effect value (otherwise move down)**
- **Move to effect value/next effect and wrap around**
- **Delete effect value when deleting effect**
- **Change current instrument when changing instrument column (absorb)**
- **Remove instrument value when inserting note off/release**
- **Remove volume value when inserting note off/release**
### Cursor movement
- **Wrap horizontally:**
- **No**
- **Yes**
- **Yes, and move to next/prev row**
- **Wrap vertically:**
- **No**
- **Yes**
- **Yes, and move to next/prev pattern**
- **Yes, and move to next/prev pattern (wrap around)**
- **Cursor movement keys behavior:**
- **Move by one**
- **Move by Edit Step**
- **Move cursor by edit step on delete**
- **Move cursor by edit step on insert (push)**
- **Move cursor up on backspace-delete**
- **Move cursor to end of clipboard content when pasting**
### Scrolling
- **Change order when scrolling outside of pattern bounds**:
- **No**: the pattern edit cursor will stay locked within the current order.
- **Yes**: moving the cursor past the edge of the previous or next order will move to that order, but not past the start or end of a song.
- **Yes, and wrap around song**: as above, but will wrap from song end to start.
- **Cursor follows current order when moving it**
- applies when playback is stopped.
- **Don't scroll when moving cursor**
- **Move cursor with scroll wheel**
## Appearance
### Scaling
- **Automatic UI scaling factor**: automatically matches the OS's UI scaling.
- **UI scaling factor**: only appears if "Automatic UI scaling factor" is off.
- **Icon size**
### Text
- **Main font**: overall interface font.\
**Header font**: font for section headers.\
**Pattern font** font for the pattern view, the order list, and related.
- if "Custom...", a file path selector will appear.
- **Size**: font size.
- **Display Japanese characters**\
**Display Chinese (Simplified) characters**\
**Display Chinese (Traditional) characters**\
@ -219,25 +310,7 @@ settings are saved when clicking the **OK** button at the bottom of the dialog.
- only toggle these options if you have enough graphics memory.
- these are a temporary solution until dynamic font atlas is implemented in Dear ImGui.
- **Number of recent files**
- **Pattern view labels:**
- **Note off (3-char)**: default is `OFF`
- **Note release (3-char)**: default is `===`.
- **Macro release (3-char)**: default is `REL`.
- **Empty field (3-char)**: default is `...`.
- **Empty field (2-char)**: default is `..`.
- **Orders row number format:**
- **Decimal**
- **Hexadecimal**
- **Pattern row number format:**
- **Decimal**
- **Hexadecimal**
- **FM parameter names:**
- **Friendly**
- **Technical**
- **Technical (alternate)**
### Program
- **Title bar:**
- **Furnace**
@ -251,44 +324,41 @@ settings are saved when clicking the **OK** button at the bottom of the dialog.
- **File path**
- **Cursor details or file path**
- **Nothing**
- **Play/edit controls layout:**
- **Classic**
- **Compact**
- **Compact (vertical)**
- **Split**
- **Position of buttons in Orders:**
- **Top**
- **Left**
- **Right**
- **FM parameter editor layout:**
- **Modern**
- **Compact (2x2, classic)**
- **Compact (1x4)**
- **Compact (4x1)**
- **Alternate (2x2)**
- **Alternate (1x4)**
- **Alternate (4x1)**
- **Position of Sustain in FM editor:**
- **Between Decay and Sustain Rate**
- **After Release Rate**
- **Macro editor layout:**
- **Unified**
- **Mobile**
- **Grid**
- **Single (with list)**
- **Single (combo box)**
- **Namco 163 chip name**
### Orders
- **Channel colors:**
- **Single**
- **Channel type**
- **Instrument type**
- **Channel name colors:**
- **Single**
- **Channel type**
- **Instrument type**
- **Channel style:**
- **Highlight channel at cursor in Orders**
- **Orders row number format:**
- **Decimal**
- **Hexadecimal**
### Pattern
- **Center pattern view**: centers pattern horizontally in view.
- **Overflow pattern highlights**
- **Display previous/next pattern**
- **Pattern row number format:**
- **Decimal**
- **Hexadecimal**
- **Pattern view labels:**
- **Note off (3-char)**: default is `OFF`
- **Note release (3-char)**: default is `===`.
- **Macro release (3-char)**: default is `REL`.
- **Empty field (3-char)**: default is `...`.
- **Empty field (2-char)**: default is `..`.
- **Pattern view spacing after:** number of pixels of space between columns.
- **Note**
- **Instrument**
- **Volume**
- **Effect**
- **Effect value**
- **Single-digit effects for 00-0F**
- **Use flats instead of sharps**
- **Use German notation**: display `B` notes as `H`, and `A#` notes as `B`.
### Channel
- **Channel style:** sets the appearance of channel headers in pattern view.
- **Classic**
- **Line**
- **Round**
@ -310,60 +380,98 @@ settings are saved when clicking the **OK** button at the bottom of the dialog.
- **Regular**
- **Monospace**
- **Center channel name**
- **Channel colors:**
- **Single**
- **Channel type**
- **Instrument type**
- **Channel name colors:**
- **Single**
- **Channel type**
- **Instrument type**
### Assets
- **Unified instrument/wavetable/sample list**: combines all three types of assets into one list.
- the buttons act as appropriate to the currently selected asset or header.
- **Horizontal instrument list**: when there are more instruments than there is room to display them...
- if on, scroll horizontally through multiple columns.
- if off, scroll vertically in one long column.
- **Colorize instrument editor using instrument type**
- **Use separate colors for carriers/modulators in FM editor**
- **Unified instrument/wavetable/sample list**
- **Horizontal instrument list**
- **Use standard OPL waveform names**
- **Overflow pattern highlights**
- **Display previous/next pattern**
- **Use German notation**: display `B` notes as `H`, and `A#` notes as `B`.
- **Single-digit effects for 00-0F**
- **Center pattern view**: centers pattern horizontally in view.
- **Unsigned FM detune values**
- **Highlight channel at cursor in Orders**
- **About screen party time**
- _warning:_ may cause epileptic seizures.
- **Display instrument type menu when adding instrument**
- if turned off, the menu can still be opened by right-clicking the add button.
### Macro Editor
- **Macro editor layout:**
- **Unified**
- **Mobile**
- **Grid**
- **Single (with list)**
- **Single (combo box)**
- **Use classic macro editor vertical slider**
### Wave Editor
- **Use compact wave editor**
- **Use classic macro editor vertical slider**
### FM Editor
- **FM parameter names:**
- **Friendly**
- **Technical**
- **Technical (alternate)**
- **Use standard OPL waveform names**
- **FM parameter editor layout:**
- **Modern**
- **Compact (2x2, classic)**
- **Compact (1x4)**
- **Compact (4x1)**
- **Alternate (2x2)**
- **Alternate (1x4)**
- **Alternate (4x1)**
- **Position of Sustain in FM editor:**
- **Between Decay and Sustain Rate**
- **After Release Rate**
- **Use separate colors for carriers/modulators in FM editor**
- **Unsigned FM detune values**: uses the internal representation of detune values, such that detune amounts of -1, -2, and -3 are shown as 5, 6, and 7.
### Statistics
- **Chip memory usage unit:** unit for displaying memory usage in the Statistics window.
- **Bytes**
- **Kilobytes**
### Oscilloscope
- **Rounded corners**
- **Border**
- **Mono**: displays a single monaural waveform of all sound mixed together.
- if turned off, waves will be drawn on top of each other for each output channel.
- all colors are configurable via _Settings > Color > Color scheme > Oscilloscope > Wave (non-mono)._
- **Anti-aliased**: smoothes the lines of the waveform.
- slight performance cost and slightly buggy.
- **Fill entire window**: removes the gap between the waveform and the edge of the window.
- **Waveform goes out of bounds**: allows the waveform to draw past the top and bottom of the oscilloscope.
### Windows
- **Rounded window corners**
- **Rounded buttons**
- **Rounded menu corners**
- **Borders around widgets**
- **Disable fade-in during start-up**
- **Oscilloscope settings:**
- **Rounded corners**
- **Fill entire window**
- **Waveform goes out of bounds**
- **Border**
- **Pattern view spacing after:**
- **Note**
- **Instrument**
- **Volume**
- **Effect**
- **Effect value**
- **Color scheme**
- **Import**
- **Export**
- **Reset defaults**
- **General**
- **Color scheme type:**
- **Dark**
- **Light**
- **Frame shading**
- several more categories...
- **Borders around widgets**: draws thin borders on buttons, checkboxes, text widgets, and the like.
# Keyboard
## Color
### Color scheme
- **Import**
- **Export**
- **Reset defaults**
- several categories of keybinds...
- click on a keybind then enter a key or key combination to change it
- right-click to clear the keybind
- **General**
- **Color scheme type:**
- **Dark**
- **Light**
- **Frame shading**: applies a gradient effect to buttons and input boxes.
- several more categories...

View File

@ -14,7 +14,7 @@ however, effects are continuous, which means you only need to type it once and t
- `F4xx`: **Fine volume slide down.** same as `0A0x` but 64× slower.
- `F8xx`: **Single tick volume slide up.** adds `x` to volume on first tick only.
- `F9xx`: **Single tick volume slide down.** subtracts `x` from volume on first tick only.
- ---
- `07xy`: **Tremolo.** changes volume to be "wavy" with a sine LFO. `x` is the speed. `y` is the depth.
- Tremolo is downward only.
- Maximum tremolo depth is -60 volume steps.
@ -26,16 +26,17 @@ however, effects are continuous, which means you only need to type it once and t
- `02xx`: **Pitch slide down.**
- `F1xx`: **Single tick pitch slide up.**
- `F2xx`: **Single tick pitch slide down.**
- `03xx`: **Portamento.** slides the current note's pitch to the specified note. `x` is the slide speed.
- A note _must_ be present for this effect to work.
- ---
- `03xx`: **Portamento.** slides the currently playing note's pitch toward the new note. `x` is the slide speed.
- a note _must_ be present with this effect for it to work.
- the effect stops automatically when it reaches the new note.
- `E1xy`: **Note slide up.** `x` is the speed, while `y` is how many semitones to slide up.
- `E2xy`: **Note slide down.** `x` is the speed, while `y` is how many semitones to slide down.
- `EAxx`: **Toggle legato.** while on, notes instantly change the pitch of the currrently playing sound instead of starting it over.
- ---
- `EAxx`: **Toggle legato.** while on, new notes instantly change the pitch of the currently playing sound instead of starting it over.
- `00xy`: **Arpeggio.** after using this effect the channel will rapidly switch between semitone values of `note`, `note + x` and `note + y`.
- `E0xx`: **Set arpeggio speed.** this sets the number of ticks between arpeggio values. default is 1.
- ---
- `04xy`: **Vibrato.** changes pitch to be "wavy" with a sine LFO. `x` is the speed, while `y` is the depth.
- Maximum vibrato depth is ±1 semitone.
- `E3xx`: **Set vibrato direction.** `xx` may be one of the following:
@ -54,7 +55,7 @@ not all chips support these effects.
- `82xx`: **Set volume of right channel** (from `00` to `FF`).
- `89xx`: **Set volume of rear left channel** (from `00` to `FF`).
- `8Axx`: **Set volume of rear right channel** (from `00` to `FF`).
- ---
- `80xx`: **Set panning (linear).** this effect behaves more like other trackers:
- `00` is left.
- `80` is center.
@ -64,15 +65,15 @@ not all chips support these effects.
- `09xx`: **Set speed/groove.** if no grooves are defined, this sets speed. If alternating speeds are active, this sets the first speed.
- `0Fxx`: **Set speed 2.** during alternating speeds or a groove, this sets the second speed.
- ---
- `Cxxx`: **Set tick rate.** changes tick rate to `xxx` Hz (ticks per second).
- `xxx` may be from `000` to `3FF`.
- `F0xx`: **Set BPM.** changes tick rate according to beats per minute. range is `01` to `FF`.
- ---
- `0Bxx`: **Jump to order.** `x` is the order to play after the current row.
- this marks the end of a loop with order `x` as the loop start.
- `0Dxx`: **Jump to next pattern.** skips the current row and remainder of current order.
- this can be used to shorten the current order.
- `0Dxx`: **Jump to next pattern.** skips the current row and remainder of current order. `x` is the row at which to start playing the next pattern.
- this can be used to shorten the current order as though it had a different pattern length.
- `FFxx`: **Stop song.** stops playback and ends the song. `x` is ignored.
## note
@ -86,12 +87,12 @@ not all chips support these effects.
- `9xxx`: **Set sample position.** jumps current sample to position `xxx * 0x100`.
- Not all chips support this effect.
- `EBxx`: **Set sample bank.**
- Does not apply on Amiga.
- `EBxx`: **Set LEGACY sample mode bank.** selects sample bank. used only for compatibility.
- does not apply on Amiga.
- `EExx`: **Send external command.**
- This effect is currently incomplete.
- `F5xx`: **Disable macro.** see macro table at the end of this document for possible values.
- `F6xx`: **Enable macro.**
- this effect is currently incomplete.
- `F5xx`: **Disable macro.**\
`F6xx`: **Enable macro.** see macro table at the end of this document for possible values.
additionally, [each chip has its own effects](../7-systems/README.md).

View File

@ -5,11 +5,11 @@ The Namco 163 instrument editor consists of two tabs: "Namco 163" for control of
## Namco 163
- **Load waveform**: if enabled, a waveform will be loaded when this instrument plays.
- if it isn't then only the offset/length change.
- if it isn't then only the position/length change.
- **Waveform**: determines the waveform that will be loaded.
- only appears when Load waveform is enabled.
- **Per-channel wave offset/length**: when enabled, the offset/length settings are split per channel.
- **Offset**: determines the waveform position in RAM.
- **Per-channel wave position/length**: when enabled, the position/length settings are split per channel.
- **Position**: determines the waveform position in RAM.
- **Length**: determines the waveform length in RAM.
## Macros

View File

@ -2,19 +2,19 @@
Wavetable synthesizers, in context of Furnace, are sound sources that operate on extremely short n-bit PCM streams. By extremely short, no more than 256 bytes. This amount of space is nowhere near enough to store an actual sampled sound, it allows certain amount of freedom to define a waveform shape.
Each chip has its own maximum size, shown in the following table. If a larger wave is defined for these chips, it will be squashed to fit within the constraints of the chips. Some hardware doesn't work well with the wavetable synthesizer (described below); these systems are marked in the "synth?" column.
Each chip has its own maximum size, shown in the following table. If a larger wave is defined for these chips, it will be squashed to fit within the constraints of the chips. Some hardware doesn't work well with the wavetable synthesizer (described below); these systems are marked in the "notes" column.
system | width | height | synth?
system | width | height | notes
--------------------|------:|:-------|:------
Bubble System | 32 | 16 |
Game Boy | 32 | 16 |
Game Boy | 32 | 16 | phase reset on waveform change (clicking)
SM8521 | 32 | 16 |
Namco WSG | 32 | 16 | RAM only
WonderSwan | 32 | 16 |
Namco 163 | ≤128 | 16 |
Namco 163 | ≤240 | 16 | limits differ depending on channel count
SNES | ≤256 | 16 |
PC Engine | 32 | 32 |
Virtual Boy | 32 | 64 | no
PC Engine | 32 | 32 | phase reset on waveform change (clicking)
Virtual Boy | 32 | 64 | wavesynth unsupported
Famicom Disk System | 64 | 64 |
Konami SCC | 32 | 256 |
Seta X1-010 | 128 | 256 |

View File

@ -32,17 +32,16 @@ the following sound chips have sample support:
- Ensoniq OTTO/ES5506
- Yamaha PCMD8/YMZ280B
- MMC5 (last channel only)
- SNES/S-DSP
## compatible sample mode
## compatible sample mode (LEGACY)
effect `17xx` enables/disables compatible sample mode whether supported (e.g. on Sega Genesis or PC Engine).
**use of this mode is discouraged in favor of Sample type instruments.**
effect `17xx` enables/disables compatible sample mode where supported (e.g. on Sega Genesis or PC Engine).
in this mode, samples are mapped to notes in an octave from C to B, allowing you to use up to 12 samples.
if you need to use more samples, you may change the sample bank using effect `EBxx`.
use of this mode is discouraged in favor of Sample type instruments.
## notes
due to limitations in some of those sound chips, some restrictions exist:

View File

@ -1,56 +1,122 @@
# sound chips
# systems
this is a list of sound chips that Furnace supports, including effects.
this is a list of some of the systems that Furnace supports, as shown in the new file dialog. each chip links to a page with information and a list of supported effects.
some systems have alternate chips, such as the Sega Genesis having a YM2612, a YM3438, or YMF276 depending on the model. this list shows the default configuration.
- **Sega Genesis**: [YM3438](ym2612.md), [SN76489](sms.md)
- **Sega Genesis (with Sega CD)**: [YM3438](ym2612.md), [SN76489](sms.md), [RF5C164](ricoh.md)
<!-- -->
- **Sega Master System**: [SN76489](sms.md)
- **Sega Master System (with FM expansion)**: [SN76489](sms.md), [YM2413](opll.md)
<!-- -->
- **NES**: [2A03](nes.md)
- **Famicom with Konami VRC6**: [2A03](nes.md), [VRC6](vrc6.md)
- **Famicom with Konami VRC7**: [2A03](nes.md), [VRC7](opl.md)
- **Famicom with MMC5**: [2A03](nes.md), [MMC5](mmc5.md)
- **Famicom with Sunsoft 5B**: [2A03](nes.md), [5B](ay8910.md)
- **Famicom with Namco 163**: [2A03](nes.md), [N163](n163.md)
- **Famicom Disk System**: [2A03](nes.md), [FDS](fds.md)
<!-- -->
- **Game Boy**: [Game Boy](game-boy.md)
<!-- -->
- **SNES**: [SNES](snes.md)
<!-- -->
- **NEC PC Engine/TurboGrafx-16**: [HuC6280](pce.md)
<!-- -->
- **Commodore VIC-20**: [VIC](vic20.md)
<!-- -->
- **Commodore 64 (6581 SID)**: [MOS 6581](c64.md)
- **Commodore 64 (8580 SID)**: [MOS 8580](c64.md)
<!-- -->
- **Amiga**: [Amiga](amiga.md)
<!-- -->
- **Arcade (YM2151 and SegaPCM)**: [YM2151](ym2152.md), [SegaPCM](segapcm.md)
<!-- -->
- **Capcom CPS-1**: [YM2151](ym2152.md), [MSM6295](msm6295.md)
- **Capcom CPS-2 (QSound)**: [QSound](qsound.md)
<!-- -->
- **Neo Geo CD**: [YM2610](ym2610.md)
- **Neo Geo CD (extended channel 2)**: [YM2610](ym2610.md)
<!-- -->
- **Neo Geo Pocket**: [T6W28](t6w28.md), [DAC](dac.md)
<!-- -->
- **Atari 2600/7800**: [TIA](tia.md)
- **Atari 800**: [POKEY](pokey.md)
<!-- -->
- **Konami Bubble System**: [AY-3-8910](ay8910.md) × 2, [Konami WSG](bubblesystem.md)
<!-- -->
- **Sharp X68000**: [YM2151](ym2152.md), [MSM6258](msm6258.md)
<!-- -->
- **PC + Sound Blaster Pro**: [YM3812](opl.md) × 2, [DAC](dac.md), [PC Speaker](pcspkr.md)
<!-- -->
- **MSX**: [AY-3-8910](ay8910.md)
- **MSX + SCC**: [YM2149(F)](ay8910.md), [SCC](scc.md)
<!-- -->
- **Commander X16 (VERA only)**: [VERA](vera.md)
<!-- -->
- and many, many more!
# chips
this is the full list of chips that Furnace supports.
- [2A03](nes.md)
- [Amiga](amiga.md)
- [AY-3-8910](ay8910.md)
- [Microchip AY8930](ay8930.md)
- [Bubble System WSG](bubblesystem.md)
- [Casio PV-1000](pv1000.md)
- [Commodore 64](c64.md)
- [Commodore PET](pet.md)
- [Commodore VIC-20](vic20.md)
- [Generic PCM DAC](dac.md)
- [Famicom Disk System](fds.md)
- [Game Boy](game-boy.md)
- [Konami K007232](k007232.md)
- [Konami K056320](k056320.md)
- [AY-3-8910/8914/YM2149(F)/Sunsoft 5B](ay8910.md)
- [Microship AY8930](ay8930.md)
- [MOS 6581/8580 (SID)](c64.md)
- [Ensoniq ES5506](es5506.md)
- [Konami SCC](scc.md)
- [Konami VRC6](vrc6.md)
- [Atari Lynx](lynx.md)
- [FDS](fds.md)
- [Game Boy](game-boy.md)
- [Generic PCM DAC](dac.md)
- [Irem GA20](ga20.md)
- [Bubble System WSG](bubblesystem.md)
- [K007232](k007232.md)
- [K053260](k056320.md)
- [Lynx](lynx.md)
- [MMC5](mmc5.md)
- [MSM5232](msm5232.md)
- [MSM6258](msm6258.md)
- [MSM6295](msm6295.md)
- [Namco 163](n163.md)
- [Namco WSG](namco.md)
- [NES](nes.md)
- [Nintendo MMC5](mmc5.md)
- [OKI MSM5232](msm5232.md)
- [OKI MSM6258](msm6258.md)
- [OKI MSM6295](msm6295.md)
- [PC Engine/TurboGrafx-16](pce.md)
- [Namco WSG/C15/C30](namco.md)
- [HuC6280](pce.md)
- [PC Speaker](pcspkr.md)
- [Philips SAA1099](saa1099.md)
- [Pokémon mini](pokemini.md)
- [Capcom QSound](qsound.md)
- [Ricoh RF5C68](ricoh.md)
- [PET](pet.md)
- [Pokémon Mini](pokemini.md)
- [POKEY](pokey.md)
- [PV-1000](pv1000.md)
- [QSound](qsound.md)
- [RF5C68/RF5C164](ricoh.md)
- [SAA1099](saa1099.md)
- [SegaPCM](segapcm.md)
- [Seta/Allumer X1-010](x1-010.md)
- [SM8521](sm8521.md)
- [SN76489/Sega PSG](sms.md)
- [SNES](snes.md)
- [Atari 2600 (TIA)](tia.md)
- [tildearrow Sound Unit](soundunit.md)
- [TI SN76489](sms.md)
- [Toshiba T6W28](t6w28.md)
- [T6W28](t6w28.md)
- [TED](ted.md)
- [TIA](tia.md)
- [VERA](vera.md)
- [WonderSwan](wonderswan.md)
- [VIC](vic20.md)
- [Virtual Boy](virtual-boy.md)
- [Yamaha YM2413 (OPLL)](opll.md)
- [Yamaha OPL](opl.md)
- [Yamaha YM2151](ym2151.md)
- [Yamaha YM2203](ym2203.md)
- [Yamaha YM2414 (OPZ)](opz.md)
- [Yamaha YM2608](ym2608.md)
- [Neo Geo/YM2610](ym2610.md)
- [Taito Arcade/YM2610B](ym2610b.md)
- [Yamaha YM2612](ym2612.md)
- [Yamaha YMZ280B](ymz280b.md)
- [VRC6](vrc6.md)
- [WonderSwan](wonderswan.md)
- [X1-010](x1-010.md)
- [VRC7, Y8950, YM3526, YM3812 and YMF262 (OPL)](opl.md)
- [YM2413 (OPLL)](opll.md)
- [YM2414 (OPZ)](opz.md)
- [YM2151 (OPM)](ym2152.md)
- [YM2203 (OPN)](ym2203.md)
- [YM2608 (OPNA)](ym2608.md)
- [YM2610 (OPNB)](ym2610.md)
- [YM2610B (OPNB2)](ym2610b.md)
- [YM2612/YM3438 (OPN2)](ym2612.md)
- [YMZ280B](ymz280b.md)
- [ZX Spectrum Beeper](zxbeep.md)
Furnace also reads .dmf files with the [Yamaha YMU759](ymu759.md) system, but...

View File

@ -18,6 +18,8 @@ imported MOD files use this chip, and will set A-4 tuning to 436.
# info
this chip uses the [Generic Sample](../4-instrument/amiga.md) instrument editor.
- the maximum rate for sample playback is technically 31469Hz but anything higher than 28867Hz will sound glitchy on hardware.
- sample lengths and loop will be set to an even number.
- samples can't be longer than 131070.

View File

@ -47,7 +47,11 @@ as of Furnace 0.6pre7, AY-3-8910 supports software sample playback, where all 3
- `2Fxx`: **write to I/O port B.**
- this changes the port's mode to "write". make sure you have connected something to it.
# chip config
# info
this chip uses the [AY-3-8910](../4-instrument/ay8910.md) instrument editor.
## AY derivative modes
AY-3-810 was an absurdly popular chip that was blessed with many third-party clones, licensed or not.

View File

@ -55,3 +55,7 @@ as of Furnace 0.6pre7, AY8930 supports software PCM, where all 3 channels can pl
- `x` is the numerator.
- `y` is the denominator.
- if `x` or `y` are 0 this will disable auto-envelope mode.
# info
this chip uses the [AY8930](../4-instrument/8930.md) instrument editor.

View File

@ -11,3 +11,7 @@ Furnace emulates this configuration as a "chip" with 32×16 wavetables.
# effects
- `10xx`: **change wave.**
# info
this chip uses the [Konami SCC/ Bubble System WSG](../4-instrument/scc.md) instrument editor.

View File

@ -57,3 +57,7 @@ two versions of aforementioned chip exist - 6581 (original chip) and 8580 (impro
- `6`: disable channel 3 (`y` is `0` or `1`)
- `3xxx`: **set duty cycle.** `xxx` range is `000` to `FFF`.
- `4xxx`: **set cutoff.** `xxx` range is `000` to `7FF`.
# info
this chip uses the [C64](../4-instrument/c64.md) instrument editor.

View File

@ -7,3 +7,7 @@ with it, you can emulate PCM DACs found in Williams arcade boards, Sound Blaster
# effects
none yet.
# info
this chip uses the [Generic Sample](../4-instrument/amiga.md) instrument editor.

View File

@ -39,3 +39,7 @@ it supports a whopping 32 channels of 16-bit PCM and:
- `8Axx`: **set panning (rear right channel).**
- `9xxx`: **set sample offset.** resets sample position to `xxx * 0x100`.
- `DFxx`: **set sample playback direction.**
# info
this chip uses the [ES5506](../4-instrument/es5506.md) instrument editor.

View File

@ -25,3 +25,7 @@ it also offers an additional 6-bit, 64-byte wavetable sound channel with (somewh
- 6: -2
- 7: -1
- why is this mapping so unnatural? because that's how DefleMask does it (yeah, as you may have guessed this effect is mostly for compatibility reasons)...
# info
this chip uses the [FDS](../4-instrument/fds.md) instrument editor.

8
doc/7-systems/ga20.md Normal file
View File

@ -0,0 +1,8 @@
# Irem GA20
ga20 is a 4 channel PCM sound source used by Irem in their arcades in late 1980s and eraly 1990s, often paired with [Yamaha YM2151](ym2151.md). Soundchip itself is rather unremarkable, having 8-bit volume and pitch control, no stereo panning
# effects
none

View File

@ -21,6 +21,11 @@ with stereo sound, two pulse channels, a wave channel and a noise channel, it pa
- set to `0` to disable it.
- `14xx`: **set sweep direction.** `0` is up and `1` is down.
# info
this chip uses the [Game Boy](../4-instrument/game-boy.md) instrument editor.
# links
- [Gameboy sound hardware](https://gbdev.gg8.se/wiki/articles/Gameboy_sound_hardware) - detailed technical information

View File

@ -9,3 +9,7 @@ it has 7 bit digital output per each channel and no volume register on chip, so
# effects
- nothing for now.
# info
this chip uses the [K007232](../4-instrument/k007232.md) instrument editor.

View File

@ -1,9 +1,13 @@
# Konami 056320
the 056320 is a sample-based chip that featured in a number of Konami arcade games, notably _Sunset Riders_ and _Teenage Mutant Ninja Turtles: Turtles in Time_. it has four channels of audio and stereo output, and can access up to 2MB of samples in 8-bit PCM or 4-bit ADPCM formats.
the 056320 is a sample-based chip that featured in a number of Konami arcade games, notably _Sunset Riders_ and _Teenage Mutant Ninja Turtles: Turtles in Time_. it has four channels of audio, 12-bit pitch resolution and stereo output, and can access up to 2MB of samples in 8-bit PCM or 4-bit ADPCM formats.
# effects
- `DFxx`: Set sample playback direction. `0` is normal; `1` is reverse.
# info
this chip uses the [K056320](../4-instrument/k056320.md) instrument editor.

View File

@ -17,3 +17,7 @@ the Atari Lynx has a 6502-based CPU with a sound part (this chip is known as MIK
- `3xxx`: **load LFSR.** this is a bitmask with values ranging from `000` to `FFF`.
- for it to work, duty macro in instrument editor must be set to some value. without it LFSR will not be fed with any bits.
# info
this chip uses the [Atari Lynx](../4-instrument/lynx.md) instrument editor.

View File

@ -10,3 +10,7 @@ additionally, it offers an 8-bit DAC which can be used to play samples. only one
- `12xx`: **set duty cycle or noise mode of channel.**
- may be `0` through `3` for the pulse channels.
# info
this chip uses the [NES](../4-instrument/nes.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -24,3 +24,7 @@ Furnace implements this chip in a way that allows the following features:
- only in internal (capacitor-based) envelope mode.
- `13xx`: **set group decay.** range is `0` to `11`.
- only in internal (capacitor-based) envelope mode.
# info
this chip uses the [MSM5232](../4-instrument/msm5232.md) instrument editor.

View File

@ -18,3 +18,7 @@ MSM6258 is an extremely basic ADPCM sound codec. it has no variable frequency ra
| 4.096 MHz | 8000 Hz |
| 8 MHz | 15625 Hz |
| 8.192 MHz | 16000 Hz |
# info
this chip uses the [MSM6258](../4-instrument/msm6258.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -6,9 +6,15 @@ an upgrade from 6258 - it provides 4 ADPCM channels, at max 32 KHz (still no var
- `20xx`: **set chip output rate.**
# chip config
# info
this chip uses the [MSM6295](../4-instrument/msm6295.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.
## chip clock rates
like MSM6258, MSM295 is an extremely basic ADPCM sound codec. it has no variable frequency rate, it depends on clock rate of a chip itself. Furnace supports following rates:
like MSM6258, MSM6295 is an extremely basic ADPCM sound codec. it has no variable frequency rate, it depends on clock rate of a chip itself. Furnace supports following rates:
| clock rate | sampling rate |
|--------------------|---------------|

View File

@ -38,3 +38,7 @@ if the waveform changes (e.g. ins change, wave macro or wave synth), or the **lo
- the length is determined by the wave's width (it will be snapped to a multiple of 4 if it isn't).
- make sure to use `21xx` first!
- `21xx`: **set position for 20xx.**
# info
this chip uses the [Namco 163](../4-instrument/n163.md) instrument editor.

View File

@ -8,3 +8,7 @@ everything starts with Namco WSG, which is a simple 3-channel wavetable with no
- `10xx`: **change waveform.**
- `11xx`: **toggle noise mode.** _warning:_ only on C30.
# info
this chip uses the [Namco WSG](../4-instrument/namco.md) instrument editor.

View File

@ -56,7 +56,11 @@ also known as Famicom. it is a five-channel sound generator: first two channels
- only works in DPCM mode.
- see table below for possible values.
# tables
# info
this chip uses the [NES](../4-instrument/nes.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.
## short noise frequencies (NTSC)

View File

@ -78,3 +78,7 @@ afterwards everyone moved to Windows and software mixed PCM streaming...
- `5Bxy`: **set KSR of operator.**
- `x` is the operator from 1 to 4; the last 2 operators only work in 4-op mode. a value of `0` means "all operators".
- `y` determines whether KSR is on.
# info
this chip uses the [FM (OPL)](../4-instrument/fm-opl.md) instrument editor.

View File

@ -65,3 +65,7 @@ the YM2413 is equipped with the following features:
- `5Bxy`: **set KSR of operator.**
- `x` is the operator, either 1 or 2. a value of `0` means "all operators".
- `y` determines whether KSR is on.
# info
this chip uses the [FM (OPLL)](../4-instrument/fm-opll.md) instrument editor.

View File

@ -113,3 +113,7 @@ no plans have been made for TX81Z MIDI passthrough, because:
- `5Dxx`: **set D2R/SR of operator 2.**
- `5Exx`: **set D2R/SR of operator 3.**
- `5Fxx`: **set D2R/SR of operator 4.**
# info
this chip uses the [FM (OPZ)](../4-instrument/opz.md) instrument editor.

View File

@ -18,5 +18,9 @@ furthermore, it has some PCM and LFO!
- `03`: LFO enabled, shift 8.
- when LFO is enabled, channel 2 is muted and its output is passed to channel 1's frequency.
- `13xx`: **set LFO speed.**
- `17xx`: **toggle PCM mode.**
- _this effect is here for compatibility reasons_; it is otherwise recommended to use Sample type instruments (which automatically enable PCM mode when used).
- `17xx`: **toggle LEGACY sample mode.**
- **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.**
# info
this chip uses the [PC Engine](../4-instrument/pce.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -29,3 +29,7 @@ oh, and of course you also need the beeper to be present in your machine. some l
# effects
ha! effects...
# info
this chip uses the [Beeper](../4-instrument/beeper.md) instrument editor.

View File

@ -9,3 +9,7 @@ some of these didn't even have sound...
# effects
- `10xx`: **set waveform.** `xx` is a bitmask.
# info
this chip uses the [PET](../4-instrument/pet.md) instrument editor.

View File

@ -5,3 +5,7 @@ the Pokémon Mini is a ridiculously small handheld system from 2001. its single
# effects
none.
# info
this chip uses the [Pokémon Mini/QuadTone](../4-instrument/quadtone.md) instrument editor.

View File

@ -35,3 +35,7 @@ a sound and input chip developed by Atari for their 8-bit computers (Atari 400,
- `12xx`: **toggle two-tone mode.**
- when enabled, channel 2 modulates channel 1. I don't know how, but it does.
- only on ASAP core.
# info
this chip uses the [POKEY](../4-instrument/pokey.md) instrument editor.

View File

@ -5,3 +5,7 @@ released only in Japan, this console was pulled after only a few weeks on the ma
# effects
- `10xx`: **set ring modulation.** amplitude modulation by the previous channel's output. `0` turns it off and `1` turns it on.
# info
this chip uses the [PV-1000](../4-instrument/pv1000.md) instrument editor.

View File

@ -17,3 +17,7 @@ there are also 3 ADPCM channels. ADPCM samples are fixed to 8012 Hz.
- `11xx`: **set echo level.**
- `12xx`: **toggle QSound algorithm.** on by default.
- `3xxx`: **set echo delay buffer length.**
# info
this chip uses the [QSound](../4-instrument/qsound.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -6,3 +6,6 @@ YM2612's sidekick - poor man's SNES DSP. 8-channel PCM sample-based synthesizer
none so far.
# info
this chip uses the [RF5C68](../4-instrument/ricoh.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -27,3 +27,7 @@ this was used by the Game Blaster and SAM Coupé. it's pretty similar to the AY-
- `111`: up loop (reverse saw)
- bit 0 sets whether the right output will mirror the left one.
- this effect affects either the first 3 or last 3 channels, depending on where it is placed.
# info
this chip uses the [SAA1099](../4-instrument/saa.md) instrument editor.

View File

@ -9,3 +9,7 @@ the SCC+ fixes this issue though (while being compatible with SCC games).
# effects
- `10xx`: **change wave.**
# info
this chip uses the [Konami SCC/Bubble System WSG](../4-instrument/scc.md) instrument editor.

View File

@ -15,3 +15,7 @@ Furnace also has a five channel version of this chip, but it only exists for Def
- `20xx`: **set PCM frequency.**
- `xx` is a 256th fraction of 31250Hz.
- this effect exists mostly for DefleMask compatibility; it is otherwise recommended to use Sample type instruments.
# info
this chip uses the [SegaPCM](../4-instrument/segapcm.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -15,9 +15,13 @@ the sound-related features and quirks of the SM8521 are as follows:
- a low bit-depth output (which means it distorts a lot).
- it phase resets when you switch waves
- 12-bit pitch with a wide frequency range
- a software-controlled D/A register that (potentially) requires all other registers to be stopped to play. due to this, it is currently, it is not implemented in Furnace as of version 0.6pre4.
- a software-controlled D/A register that (potentially) requires all other registers to be stopped to play. due to this, it is currently not implemented in Furnace as of version 0.6pre4.
## effect commands
- `10xx`: **set waveform.**
- `xx` is a value between 0 and 255 that sets the waveform of the channel you place it on.
# info
this chip uses the [SM8521](../4-instrument/sm8521.md) instrument editor.

View File

@ -1,4 +1,4 @@
# TI SN76489 (e.g. sega Master System)
# TI SN76489 (e.g. Sega Master System)
a relatively simple sound chip made by Texas Instruments. a derivative of it is used in Sega's Master System, the predecessor to Genesis.
@ -14,7 +14,12 @@ the original iteration of the SN76489 used in the TI-99/4A computer, the SN94624
- `0`: thin pulse.
- `1`: noise.
# chip config
# info
this chip uses the [SN76489/Sega PSG](../4-instrument/psg.md) instrument editor.
## SN7 versions
SN7 was extremely popular due to low cost. Therefore, it was cloned and copied to no end, often with minor differences between each other. Furnace supports several of these:
- SN94624, can only produce tones as low as 100Hz, and is clocked at 447 KHz.

View File

@ -67,7 +67,10 @@ Furnace also allows the SNES to use wavetables (and the wavetable synthesizer) i
- _Note:_ Be sure the sum of all coefficients is between -128 and 127. sums outside that may result in overflow and therefore clicking.
- see [SnesLab](https://sneslab.net/wiki/FIR_Filter) for a full explanation and examples.
# tables
# info
this chip uses the [SNES](../4-instrument/snes.md) instrument editor.
## ADSR

View File

@ -54,3 +54,7 @@ it has the following capabilities:
- bit 0-6: speed
- bit 7: up direction
- `4xxx`: **set cutoff.** range is `0` to `FFF`.
# info
this chip uses the [Sound Unit](../4-instrument/soundunit.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -9,3 +9,7 @@ this chip was used in Neo Geo Pocket.
- `20xx`: **set noise mode.**
- `0`: thin pulse.
- `1`: noise.
# info
this chip uses the [T6W28](../4-instrument/t6w28.md) instrument editor.

View File

@ -8,3 +8,7 @@ pitch range is limited as well, akin to that of SN76489, and volume control is g
# effects
none so far.
# info
this chip uses the [TED](../4-instrument/ted.md) instrument editor.

View File

@ -29,9 +29,12 @@ Furnace isn't complete without this one...
# tables
# info
pitch number can be used for absolute notes in arpeggio macros.
this chip uses the [TIA](../4-instrument/tia.md) instrument editor.
- pitch number can be used for absolute notes in arpeggio macros.
## shape 1

View File

@ -15,3 +15,7 @@ currently Furnace does not support the PCM channel's stereo mode, though (except
- `22xx`: **set duty cycle.** range is `0` to `3F`.
- `EExx`: **ZSM synchronization event.**
- Where `xx` is the event payload. This has no effect in how the music is played in Furnace, but the ZSMKit library for the Commander X16 interprets these events inside ZSM files and optionally triggers a callback routine. This can be used, for instance, to cause game code to respond to beats or at certain points in the music.
# info
this chip uses the [VERA](../4-instrument/vera.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -16,3 +16,7 @@ these channels are not referred as "square" wave channels since a technique to p
## effect commands
- `10xx`: **switch waveform.** range is `00` to `0F`.
# info
this chip uses the [VIC](../4-instrument/vic.md) instrument editor.

View File

@ -41,3 +41,7 @@ additionally, channel 5 offers a modulation/sweep unit. the former is similar to
- `15xx`: **set modulation wave.**
- `xx` points to a wavetable. range is `0` to `FF`.
- this is an alternative to setting the modulation wave through the instrument.
# info
this chip uses the [Virtual Boy](../4-instrument/virtual-boy.md) instrument editor.

View File

@ -15,4 +15,9 @@ Furnace supports this routine for PCM playback, but it consumes a lot of CPU tim
these effects only are effective in the pulse channels.
- `12xx`: **set duty cycle.** range is `0` to `7`.
- `17xx`: **toggle PCM mode.**
- `17xx`: **toggle LEGACY sample mode.**
- **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.**
# info
this chip uses the [VRC](../4-instrument/vrc6.md), [VRC (saw)](../4-instrument/vrc6.md), and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -19,3 +19,7 @@ it has 4 wavetable channels. some of them have additional capabilities:
- 1-32: enable and set period.
- `13xx`: **setup sweep amount.** channel 3 only.
- `17xx`: **toggle PCM mode.** channel 2 only.
# info
this chip uses the [WonderSwan](../4-instrument/wonderswan.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -27,7 +27,8 @@ in Furnace, you can enable the envelope shape split mode. when it is set, its wa
- `10xx`: **change wave.**
- `11xx`: **change envelope shape.** also wavetable.
- `17xx`: **toggle PCM mode.**
- `17xx`: **toggle LEGACY sample mode.**
- **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.**
- `20xx`: **set PCM frequency.** range is `1` to `FF`.
- PCM frequency formula: `step * (clock / 8192)`.
- range is 1.95KHz to 498KHz if the chip clock is 16MHz.
@ -45,3 +46,7 @@ in Furnace, you can enable the envelope shape split mode. when it is set, its wa
- `x` is the numerator.
- `y` is the denominator.
- if `x` or `y` are 0 this will disable auto-envelope mode.
# info
this chip uses the [X1-010](../4-instrument/x1_010.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -68,3 +68,7 @@ in most arcade boards the chip was used in combination with a PCM chip, like [Se
- `5Dxx`: **set D2R/SR of operator 2.**
- `5Exx`: **set D2R/SR of operator 3.**
- `5Fxx`: **set D2R/SR of operator 4.**
# info
this chip uses the [FM (OPM)](../4-instrument/fm-opm.md) instrument editor.

View File

@ -100,7 +100,12 @@ several variants of this chip were released as well, with more features.
- `5Exx`: **set D2R/SR of operator 3.**
- `5Fxx`: **set D2R/SR of operator 4.**
# system modes
# info
this chip uses the [FM (OPN)](../4-instrument/fm-opn.md) and [AY-3-8910/SSG](../4-instrument/ay8910.md) instrument editor.
## extended channel 3
in ExtCh mode, channel 3 is split into one column for each of its four operators and feedback are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds.

View File

@ -100,7 +100,12 @@ the YM2610 (OPNB) and YM2610B chips are very similar to this one, but the built-
- `5Exx`: **set D2R/SR of operator 3.**
- `5Fxx`: **set D2R/SR of operator 4.**
# system modes
# info
this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors.
## extended channel 3
in ExtCh mode, channel 3 is split into one column for each of its four operators. feedback and LFO levels are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds.

View File

@ -98,7 +98,11 @@ its soundchip is a 4-in-1: 4ch 4-op FM, YM2149 (AY-3-8910 clone) and [2 differen
- `5Exx`: **set D2R/SR of operator 3.**
- `5Fxx`: **set D2R/SR of operator 4.**
# system modes
# info
this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors.
## extended channel 2
in ExtCh mode, channel 2 is split into one column for each of its four operators. feedback and LFO levels are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds.

View File

@ -97,8 +97,13 @@ it is backward compatible with the original chip.
- `5Exx`: **set D2R/SR of operator 3.**
- `5Fxx`: **set D2R/SR of operator 4.**
# system modes
# info
this chip uses the [FM (OPN)](../4-instrument/fm-opn.md), [Generic Sample](../4-instrument/amiga.md), [AY-3-8910/SSG](../4-instrument/ay8910.md), [ADPCM-A](../4-instrument/adpcm-a.md), and [ADPCM-B](../4-instrument/adpcm-b.md) instrument editors.
## extended channel 3
in ExtCh mode, channel 3 is split into one column for each of its four operators. feedback and LFO levels are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds.
all four operators are still combined according to the algorithm in use. for example, algorithm 7 acts as four independent sine waves. algorithm 4 acts as two independent 2op sounds. even with algorithm 0, placing a note in any operator triggers that operator alone.

View File

@ -16,8 +16,9 @@ as of Furnace 0.6pre5, Furnace offers DualPCM, a Z80 driver that splits channel
- `16xy`: **set multiplier of operator.**
- `x` is the operator (1-4).
- `y` is the multiplier.
- `17xx`: **enable PCM channel.**
- `17xx`: **toggle LEGACY sample mode.**
- this only works on channel 6.
- **this effect exists only for compatibility reasons! its use is NOT recommented. use Sample type instruments instead.**
- `18xx`: **toggle extended channel 3 mode.**
- 0 disables it and 1 enables it.
- only in extended channel 3 chip.
@ -66,3 +67,24 @@ as of Furnace 0.6pre5, Furnace offers DualPCM, a Z80 driver that splits channel
- `5Dxx`: **set D2R/SR of operator 2.**
- `5Exx`: **set D2R/SR of operator 3.**
- `5Fxx`: **set D2R/SR of operator 4.**
# info
this chip uses the [FM (OPN)](../4-instrument/fm-opn.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.
## extended channel 3
in ExtCh mode, channel 3 is split into one column for each of its four operators. feedback and LFO levels are shared. the frequency of each operator may be controlled independently with notes and effects. this can be used for more polyphony or more complex sounds.
all four operators are still combined according to the algorithm in use. for example, algorithm 7 acts as four independent sine waves. algorithm 4 acts as two independent 2op sounds. even with algorithm 0, placing a note in any operator triggers that operator alone.
## CSM
CSM is short for "Composite Sinusoidal Modeling". CSM works by sending key-on and key-off commands to channel 3 at a specific frequency, controlled by the added "CSM Timer" channel. this can be used to create vocal formants (speech synthesis!) or other complex effects.
CSM is beyond the scope of this documentation. for more information, see this [brief SSG-EG and CSM video tutorial](https://www.youtube.com/watch?v=IKOR0TUlnWU).
## DualPCM
thanks to the Z80 sound CPU, DualPCM can play two samples at once! this mode splits channel 6 into two individual PCM channels with variable pitch. these are mixed together in software and streamed to channel 6 with a mix rate of 13750 Hz. VGM export requires the "direct stream mode" option to be enabled, and resulting files will be very large.

View File

@ -15,3 +15,7 @@ even DefleMask dropped support for the chip in version 0.11, which just shows ho
hey, at least it was the spark that ignited the idea of DefleMask.
# info
this chip uses the [FM (OPL)](../4-instrument/fm-opl.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -7,3 +7,7 @@ it has 16-level stereo panning, up to 16-bit PCM and up to 16MB of external PCM
# effects
none so far.
# info
this chip uses the [YMZ280B](../4-instrument/ymz280b.md) and [Generic Sample](../4-instrument/amiga.md) instrument editors.

View File

@ -14,3 +14,7 @@ not really - very soon talented programmers found out ways to output much more t
- `xx` is the sample number.
- overlay drums are 1-bit and always play at 55930Hz (NTSC) or 55420Hz (PAL).
- the maximum length is 2048!
# info
this chip uses the [Beeper](../4-instrument/beeper.md), [Generic Sample](../4-instrument/amiga.md), and [Pokémon Mini/QuadTone](../4-instrument/quadtone.md) instrument editors.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 164 KiB

View File

@ -8,6 +8,11 @@ right-clicking within the view will change it to the configuration view shown ab
- **Columns**: arranges oscilloscopes into this many columns.
- **Size (ms)**: sets what length of audio is visible in each oscilloscope.
- **Center waveform**: does its best to latch the waveform to the channel's note frequency and centers the display.
- **Automatic columns**: sets the number of columns based on the number of channels.
- **Off**: use the Columns setting.
- **Mode 1**: always fewer columns than rows.
- **Mode 2**: bias slightly toward more columns.
- **Mode 3**: always more columns than rows.
- **Amplitude**: scales amplitude for all oscilloscopes.
- **Gradient**: see below.
- the color selector sets the color for all waveforms. right-clicking on it pops up an option dialog:
@ -19,6 +24,7 @@ right-clicking within the view will change it to the configuration view shown ab
- `%C`: channel short name
- `%d`: channel number (starting from 0)
- `%D`: channel number (starting from 1)
- `%n`: channel note
- `%i`: instrument name
- `%I`: instrument number (decimal)
- `%x`: instrument number (hex)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 122 KiB

View File

@ -3,4 +3,5 @@
here is a small collection of useful tricks and techniques to really make Furnace sing.
- [using samples with limited playback rates](limited-samples.md)
- [choosing emulation cores](emulation-cores.md)
- [choosing emulation cores](emulation-cores.md)
- [guide on using OPLL patch macro](opllswitching.md)

View File

@ -0,0 +1,19 @@
# using OPLL patch macro
YM2413's biggest flaw (or, rather, cost-saving feature) was that it could use only one user-defined instrument at once. It wasn't monotimbrial; you could use 15 built-in presets and 5 built-in drum tones freely, but for these going off the beaten path, it surely was limiting. However, there is one technique, as amazing as simple: **mid-note preset switching**.
the idea is to use the first patch to put the envelope in an unintended state for the second patch so that it sounds different, with a higher or lower modulation level. the sustain level defines at which "envelope level" the envelope will switch to the sustain state (or release depending on envelope type). if the first patch is used to put the envelope into sustain at a higher or lower envelope state than intended for the second patch, it'll still be in sustain/release but at a higher or lower level than it should be at that point.
therefore, much more variety can be forced out, without using custom instruments. As of July 2023, Furnace is the only tool supporting this feature. It is accessed in 'Macros' tab in OPLL instrument editor.
For example, try putting the first macro value as 14 (acoustic bass preset), followed by 4 (flute preset). This way you will get distortion guitar-like sound this is nothing like other 2413 preset! There are many combination to test out, which is highly recommended (I can only say, 12->1 or 12->4 produces sound similiar to the well-known 4-op FM mallet brass)
## drums using this technique
Using OPLL's drum mode, described is systems/opll.md, you gain access to 5 hardcoded drum tones at the expense of 3 melodic FM channels. Patch switching eliminates that, as using it, it's also possible to construct percussive sounds, some even fuller than their drum mode counterparts!
In short, noise portion of drums (as in hi-hats), can be created of the very high pitched pseudo-distortion guitar, described as above. For kicks, snares, toms and claps, more effort is needed, however using volume and arpeggio macros will help.
## examples
- [Lman-Clubster cover by Mahbod](https://www.youtube.com/watch?v=jfHs7tSyjXI)
- [OPLL Nation by Mahbod](https://www.youtube.com/watch?v=ou6pEfxByeE)

View File

@ -1440,8 +1440,8 @@ namespace IGFD
SYSTEMTIME localTime;
char timebuf[100];
infos.fileSize=dent.dwin_size;
if (FileTimeToSystemTime(&dent.dwin_mtime,&systemTime)==TRUE) {
infos.fileSize=dent->dwin_size;
if (FileTimeToSystemTime(&dent->dwin_mtime,&systemTime)==TRUE) {
if (SystemTimeToTzSpecificLocalTime(NULL,&systemTime,&localTime)==TRUE) {
snprintf(timebuf,99,"%d/%.2d/%.2d %.2d:%.2d",localTime.wYear,localTime.wMonth,localTime.wDay,localTime.wHour,localTime.wMinute);
} else {
@ -1730,9 +1730,9 @@ namespace IGFD
//time_t st_ctime; /* time of last status change - not sure out of ntfs */
#ifdef _WIN32
if (vInfos->fileType != 'd')
if (vInfos.fileType != 'd')
{
vInfos->formatedFileSize = prFormatFileSize(vInfos->fileSize);
vInfos.formatedFileSize = prFormatFileSize(vInfos.fileSize);
}
#else
std::string fpn;

View File

@ -97,7 +97,9 @@
// Your renderer backend will need to support it (most example renderer backends support both 16/32-bit indices).
// Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer.
// Read about ImGuiBackendFlags_RendererHasVtxOffset for details.
//#define ImDrawIdx unsigned int
#ifndef IS_MOBILE
#define ImDrawIdx unsigned int
#endif
//---- Override ImDrawCallback signature (will need to modify renderer backends accordingly)
//struct ImDrawList;

View File

@ -96,7 +96,9 @@
// Your renderer backend will need to support it (most example renderer backends support both 16/32-bit indices).
// Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer.
// Read about ImGuiBackendFlags_RendererHasVtxOffset for details.
//#define ImDrawIdx unsigned int
#ifndef IS_MOBILE
#define ImDrawIdx unsigned int
#endif
//---- Override ImDrawCallback signature (will need to modify renderer backends accordingly)
//struct ImDrawList;

View File

@ -2224,10 +2224,22 @@ ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float si
ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
{
// workaround for big-endian
#ifdef TA_BIG_ENDIAN
unsigned char* beData=(unsigned char*)IM_ALLOC(compressed_ttf_size);
for (int i=0; i<compressed_ttf_size; i++) {
beData[i]=compressed_ttf_data[i^3];
}
compressed_ttf_data=beData;
#endif
const unsigned int buf_decompressed_size = stb_decompress_length((const unsigned char*)compressed_ttf_data);
unsigned char* buf_decompressed_data = (unsigned char*)IM_ALLOC(buf_decompressed_size);
stb_decompress(buf_decompressed_data, (const unsigned char*)compressed_ttf_data, (unsigned int)compressed_ttf_size);
#ifdef TA_BIG_ENDIAN
IM_FREE(beData);
#endif
ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
IM_ASSERT(font_cfg.FontData == NULL);
font_cfg.FontDataOwnedByAtlas = true;

View File

@ -532,6 +532,9 @@ nfdresult_t NFD_OpenDialogMultiple( const std::vector<std::string>& filterList,
nfdselcallback_t selCallback )
{
nfdresult_t nfdResult = NFD_ERROR;
NFDWinEvents* winEvents;
bool hasEvents=true;
DWORD eventID=0;
HRESULT coResult = COMInit();
@ -566,6 +569,16 @@ nfdresult_t NFD_OpenDialogMultiple( const std::vector<std::string>& filterList,
goto end;
}
// Pass the callback
winEvents=new NFDWinEvents(selCallback);
if ( !SUCCEEDED(fileOpenDialog->Advise(winEvents,&eventID)) ) {
// error... ignore
hasEvents=false;
winEvents->Release();
} else {
winEvents->Release();
}
// Set a flag for multiple options
DWORD dwFlags;
result = fileOpenDialog->GetOptions(&dwFlags);
@ -613,8 +626,12 @@ nfdresult_t NFD_OpenDialogMultiple( const std::vector<std::string>& filterList,
}
end:
if ( fileOpenDialog )
if (fileOpenDialog) {
if (hasEvents) {
fileOpenDialog->Unadvise(eventID);
}
fileOpenDialog->Release();
}
COMUninit(coResult);

View File

@ -1,4 +1,4 @@
# modification disclaimer
this is a modified version of Nuked-OPL3 which implements channel muting in the core.
this is a modified version of Nuked-OPL3 which implements channel muting in the core, and resampling function.
see [this issue](https://github.com/tildearrow/furnace/issues/414) for more information.

5
extern/opl/opl3.c vendored
View File

@ -1362,6 +1362,11 @@ void OPL3_Reset(opl3_chip *chip, uint32_t samplerate)
#endif
}
void OPL3_Resample(opl3_chip *chip, uint32_t samplerate)
{
chip->rateratio = (samplerate << RSM_FRAC) / 49716;
}
void OPL3_WriteReg(opl3_chip *chip, uint16_t reg, uint8_t v)
{
uint8_t high = (reg >> 8) & 0x01;

1
extern/opl/opl3.h vendored
View File

@ -158,6 +158,7 @@ struct _opl3_chip {
void OPL3_Generate(opl3_chip *chip, int16_t *buf);
void OPL3_GenerateResampled(opl3_chip *chip, int16_t *buf);
void OPL3_Reset(opl3_chip *chip, uint32_t samplerate);
void OPL3_Resample(opl3_chip *chip, uint32_t samplerate);
void OPL3_WriteReg(opl3_chip *chip, uint16_t reg, uint8_t v);
void OPL3_WriteRegBuffered(opl3_chip *chip, uint16_t reg, uint8_t v);
void OPL3_GenerateStream(opl3_chip *chip, int16_t *sndptr, uint32_t numsamples);

View File

@ -226,7 +226,7 @@ void k053260_core::voice_t::write(u8 address, u8 data)
m_start = (m_start & ~0x00ff00) | (u32(data) << 8);
break;
case 6: // start address bit 16-20
m_start = (m_start & ~0x1f0000) | (u32(bitfield(data, 16, 5)) << 16);
m_start = (m_start & ~0x1f0000) | (u32(bitfield(data, 0, 5)) << 16);
break;
case 7: // volume
m_volume = bitfield(data, 0, 7);

View File

@ -143,8 +143,8 @@ size | description
| - 0x49: Neo Geo CD extended - 16 channels
| - 0x80: AY-3-8910 - 3 channels
| - 0x81: Amiga - 4 channels
| - 0x82: YM2151 alone - 8 channels
| - 0x83: YM2612 alone - 6 channels
| - 0x82: YM2151 - 8 channels
| - 0x83: YM2612 - 6 channels
| - 0x84: TIA - 2 channels
| - 0x85: VIC-20 - 4 channels
| - 0x86: PET - 1 channel
@ -159,7 +159,7 @@ size | description
| - 0x8f: OPL (YM3526) - 9 channels
| - 0x90: OPL2 (YM3812) - 9 channels
| - 0x91: OPL3 (YMF262) - 18 channels
| - 0x92: MultiPCM - 28 channels
| - 0x92: MultiPCM - 28 channels (UNAVAILABLE)
| - 0x93: Intel 8253 (beeper) - 1 channel
| - 0x94: POKEY - 4 channels
| - 0x95: RF5C68 - 8 channels
@ -187,8 +187,8 @@ size | description
| - 0xab: MSM6258 - 1 channel
| - 0xac: Commander X16 (VERA) - 17 channels
| - 0xad: Bubble System WSG - 2 channels
| - 0xae: OPL4 (YMF278B) - 42 channels
| - 0xaf: OPL4 drums (YMF278B) - 44 channels
| - 0xae: OPL4 (YMF278B) - 42 channels (UNAVAILABLE)
| - 0xaf: OPL4 drums (YMF278B) - 44 channels (UNAVAILABLE)
| - 0xb0: Seta/Allumer X1-010 - 16 channels
| - 0xb1: Ensoniq ES5506 - 32 channels
| - 0xb2: Yamaha Y8950 - 10 channels
@ -199,26 +199,29 @@ size | description
| - 0xb7: YM2608 extended - 19 channels
| - 0xb8: YMZ280B - 8 channels
| - 0xb9: Namco WSG - 3 channels
| - 0xba: Namco 15xx - 8 channels
| - 0xbb: Namco CUS30 - 8 channels
| - 0xba: Namco C15 - 8 channels
| - 0xbb: Namco C30 - 8 channels
| - 0xbc: MSM5232 - 8 channels
| - 0xbd: YM2612 extra features extended - 11 channels
| - 0xbe: YM2612 extra features - 7 channels
| - 0xbd: YM2612 DualPCM extended - 11 channels
| - 0xbe: YM2612 DualPCM - 7 channels
| - 0xbf: T6W28 - 4 channels
| - 0xc0: PCM DAC - 1 channel
| - 0xc1: YM2612 CSM - 10 channels
| - 0xc2: Neo Geo CSM (YM2610) - 18 channels
| - 0xc3: YM2203 CSM - 10 channels
| - 0xc4: YM2608 CSM - 20 channels
| - 0xc5: YM2610B CSM - 20 channels
| - 0xc2: Neo Geo CSM (YM2610) - 18 channels (UNAVAILABLE)
| - 0xc3: YM2203 CSM - 10 channels (UNAVAILABLE)
| - 0xc4: YM2608 CSM - 20 channels (UNAVAILABLE)
| - 0xc5: YM2610B CSM - 20 channels (UNAVAILABLE)
| - 0xc6: K007232 - 2 channels
| - 0xc7: GA20 - 4 channels
| - 0xc8: SM8521 - 3 channels
| - 0xc9: M114S - 16 channels
| - 0xc9: M114S - 16 channels (UNAVAILABLE)
| - 0xca: ZX Spectrum (beeper, QuadTone engine) - 5 channels
| - 0xcb: Casio PV-1000 - 3 channels
| - 0xcc: K053260 - 4 channels
| - 0xcd: TED - 2 channels
| - 0xce: Namco C140 - 24 channels
| - 0xcf: Namco C219 - 16 channels (UNAVAILABLE)
| - 0xd0: Namco C352 - 32 channels (UNAVAILABLE)
| - 0xde: YM2610B extended - 19 channels
| - 0xe0: QSound - 19 channels
| - 0xfc: Pong - 1 channel
@ -227,6 +230,8 @@ size | description
| - 0xff: reserved for development
| - (compound!) means that the system is composed of two or more chips,
| and has to be flattened.
| - (UNAVAILABLE) means that the chip hasn't been implemented in Furnace
| yet.
32 | sound chip volumes (<135) or reserved
| - signed char, 64=1.0, 127=~2.0
| - as of version 135 these fields only exist for compatibility reasons.

View File

@ -119,6 +119,7 @@ the following instrument types are available:
- 49: PV-1000
- 50: K053260
- 52: TED
- 53: C140
the following feature codes are recognized:

View File

@ -162,11 +162,12 @@ There are currently no supported expansion HW IDs assigned.
The purpose of this channel is to provide for music synchronization cues that applications may use to perform operations in sync with the music (such as when the Goombas jump in New Super Mario Bros in time with the BOP! BOP! notes in the music). It is intended for the reference player to provide a sync channel callback, passing the data bytes to the callback function, and then to proceed with playback.
The synchronization format currently defines this one event type:
The synchronization format currently defines these event types:
Event Type|Description|Message Format
--|--|--
`0x00`|Generic sync message|`xx` (any value from `0x00`-`0xff`)
`0x01`|Song tuning|a signed byte indicating an offset from A-440 tuning represented in 256ths of a semitone
An example of an EXTCMD containing one sync event might look as follows: `0x40 0x82 0x00 0x05`

1306
res/icons.sfd Normal file

File diff suppressed because it is too large Load Diff

BIN
res/icons.ttf Normal file

Binary file not shown.

View File

@ -485,6 +485,12 @@ class DivDispatch {
*/
virtual bool keyOffAffectsPorta(int ch);
/**
* test whether volume is global.
* @return whether it is.
*/
virtual bool isVolGlobal();
/**
* get the lowest note in a portamento.
* @param ch the channel in question.

View File

@ -80,6 +80,7 @@
#include "platform/pv1000.h"
#include "platform/k053260.h"
#include "platform/ted.h"
#include "platform/c140.h"
#include "platform/pcmdac.h"
#include "platform/dummy.h"
#include "../ta-log.h"
@ -216,13 +217,6 @@ void DivDispatchContainer::clear() {
if (dispatch->getDCOffRequired()) {
dcOffCompensation=true;
}
// run for one cycle to determine DC offset
// TODO: SAA1099 doesn't like that
/*dispatch->acquire(bbIn[0],bbIn[1],0,1);
temp[0]=bbIn[0][0];
temp[1]=bbIn[1][0];
prevSample[0]=temp[0];
prevSample[1]=temp[1];*/
}
void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, double gotRate, const DivConfig& flags) {
@ -479,7 +473,7 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
break;
case DIV_SYSTEM_NAMCO:
dispatch=new DivPlatformNamcoWSG;
// Pac-Man (TODO: support Pole Position?)
// Pac-Man
((DivPlatformNamcoWSG*)dispatch)->setDeviceType(1);
break;
case DIV_SYSTEM_NAMCO_15XX:
@ -511,6 +505,9 @@ void DivDispatchContainer::init(DivSystem sys, DivEngine* eng, int chanCount, do
case DIV_SYSTEM_TED:
dispatch=new DivPlatformTED;
break;
case DIV_SYSTEM_C140:
dispatch=new DivPlatformC140;
break;
case DIV_SYSTEM_PCM_DAC:
dispatch=new DivPlatformPCMDAC;
break;

Some files were not shown because too many files have changed in this diff Show More