diff --git a/.gitignore b/.gitignore index 5bafeaa..fe12411 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ distribute/* # this should be automatically generated at build hlp/HTMLDefines.h hlp/changelog.htm +hlp/license.htm ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. diff --git a/CHANGELOG.md b/CHANGELOG.md index 96114f5..bee7c33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,23 +6,34 @@ Written by D.P.C.M. Version 0.5.2.9 -Last updated: January 06, 2025 +Last updated: January 11, 2025 --- -## Unreleased - 2026-01-06 +## Unreleased - 2026-01-11 ### Important changes -- ... +- Remove unused `sound.htm` page (@Gumball2415 #16) +- Explicitly mention licensing for Dn-help (@Gumball2415 #16) ### Improvements -- ... +- Reword module properties description (@Gumball2415 #16) +- Declutter and update pattern editor descriptions (@Gumball2415 #16) +- Add description of hold instrument `&&` command (@brickblock369 @Gumball2415 #14 #16) +- Add more detailed expansion audio chip images (@Gumball2415 #16) +- Link GPLv2, GPLv3, and MIT-0 license texts (@Gumball2415 #16) +- Link to DPCM pitch table in DPCM import/editor page (@Gumball2415 #16) +- Update Namco 163 information (@Gumball2415 #16) +- Add description of exponential volume in 5B instruments page (@Gumball2415 #16) ### Bug fixes -- ... +- Fix spellings of "GitHub" (@Gumball2415 #16) +- Fix and refactor table stylings (@Gumball2415 #16) + - Sort `Exx` hardware length counter value table + - Clarify 5B `V0x` command table ### Internal @@ -30,6 +41,7 @@ Last updated: January 06, 2025 - Update GitHub pull request template (@Gumball2415 #15) - Refactor HTMLHelp custom build commands (@Gumball2415 #15) - Add change log (@Gumball2415 #15) +- Add dedicated Python script for patching template files (@Gumball2415 #9 #16) @@ -142,10 +154,10 @@ This update simply adds the changelog information from 0.4.0.0 and 0.4.0.1 into Additions -- Updated the changelog to version 0.3.1.0 +- Updated the changelog to version 0.3.1.0 -#### Note from Dn-FT maintainer: +## Note from Dn-FT maintainer Before this release, Dn-help used to be part of the main repository, where it was first reimplemented at Dn0.3.0.0. Then, Dn-help became its own subrepository, where the initial commit was made on 2021-04-30, sometime after Dn0.3.0.0. diff --git a/LICENSE.txt b/LICENSE-GPLv3.txt similarity index 100% rename from LICENSE.txt rename to LICENSE-GPLv3.txt diff --git a/README.md b/README.md index b3caf9c..28a322c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Dn-Famitracker Help -This repository hosts the source code for [Dn-Famitracker](https://github.com/Dn-Programming-Core-Management/Dn-FamiTracker)'s help dialog. While the main program indeed has this contained within it's own source code, the main use of this repository is to provide finalized and finished versions of the Help File to all new releases of Dn-FamiTracker. +This repository hosts the source code for [Dn-Famitracker](https://github.com/Dn-Programming-Core-Management/Dn-FamiTracker)'s help dialog. While the main program indeed has this contained within it's own source code, the main use of this repository is to provide finalized and finished versions of the Help File to all new releases of Dn-FamiTracker. As such it is best to consider this repository a "development" build of the help file, and may not represent the "final" builds included with Dn-FamiTracker releases. @@ -21,4 +21,4 @@ All contributions are welcome, feel free to submit pull requests, or submit sugg ## License -Since this is a fragment of [Dn-Famitracker](https://github.com/Dn-Programming-Core-Management/Dn-FamiTracker)'s codebase, the license falls under the same terms. +Since this is a fragment of [Dn-Famitracker](https://github.com/Dn-Programming-Core-Management/Dn-FamiTracker)'s codebase, the license falls under the same terms. Dn-help project files are licensed under GPL v3. diff --git a/hlp/2a03.htm b/hlp/2a03.htm index b197810..4bb0033 100644 --- a/hlp/2a03.htm +++ b/hlp/2a03.htm @@ -3,36 +3,32 @@ - - 2A03/2A07 internal channels
- -

- Picture of the 2A03G chip

+ 2A03/2A07 APU
+ +
+ Picture of the 2A03G chip + +
+
+
+ Picture of the 2A07 chip + +

About

This is the sound generator found inside the NES CPU. The NTSC version - (America/Japan) is named 2A03 and the PAL version (europe) is named 2A07. The - difference between the chips is that NTSC version runs at 1.79 MHz - while PAL runs at 1.66 MHz.

+ (America/Japan) is named 2A03 and the PAL version (europe) is named + 2A07. The main difference between the chips is that NTSC version runs + at 1.79 MHz while PAL runs at 1.66 MHz.

The audio update rate is typically tied to NMI or the video refresh rate, where each @@ -45,13 +41,19 @@

- - - - -
-

- Note: - The volume level - of triangle and noise channels will be affected by the DPCM channel, - due to the way the sound is mixed in the hardware. - More info is available on the bottom of this page. -

-
+
+

+ Note: + The volume level + of triangle and noise channels will be affected by the DPCM channel, + due to the way the sound is mixed in the hardware. + More info is available on the bottom of this page. +

+

Instruments

@@ -177,8 +175,11 @@

Valid values are:

  • Source is available under the GNU General Public License version 3.0 (GPLv3). @@ -79,6 +75,15 @@
  • Pattern effect list
  • Frequently Asked Questions (FAQ)
  • Change log
  • +
  • Licenses and libraries
  • +

    Contact and support

    @@ -90,32 +95,38 @@

    Contributing

    If you want to contribute to the help file, please feel free to - do so by creating a pull request or issue on the Dn-Help Github. + do so by creating a pull request or issue on the Dn-Help GitHub.

    - - + + - + - - + + - +
    Dn-FamiTracker Github: Link to Github repositoryDn-FamiTracker GitHub: Link to GitHub repository
    Dn-Help Github:Dn-Help GitHub: Link to Dn-Help repository
    FamiTracker Website (archived link):http://www.famitracker.comFamiTracker Website:http://www.famitracker.com
    Discord:FamiTracker Discord Invite Linkfamitracker.org Discord Invite Link

    - Help manual written and augmented by forple and Persune.
    - FamiTracker is Copyright © 2005 - 2020 jsr.
    - 0CC-FamiTracker is © 2014-2018 HertzDevil
    - Dn-Famitracker is Copyright © 2020-2025 D.P.C.M.
    + + Help manual written by jsr, augmented by forple and Persune with additional 0CC-FamiTracker information by HertzDevil. +
    + + FamiTracker copyright © 2005 - 2020 jsr.
    + + 0CC-FamiTracker copyright © 2014-2018 HertzDevil
    + + Dn-Famitracker copyright © 2020-2026 D.P.C.M. +
    \ No newline at end of file diff --git a/hlp/markdown.css b/hlp/markdown.css index 9d8ae30..7f12e10 100644 --- a/hlp/markdown.css +++ b/hlp/markdown.css @@ -2,29 +2,36 @@ { font-family: Verdana } -.markdown-body h1, +/* .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4 { - color: black; -} + font-weight:normal; +} */ .markdown-body h1 { - font-size: 18pt; + font-size: 22pt; + color: #884848; + font-weight:normal; + margin-bottom: 0; } .markdown-body h2 { font-size: 12pt; + color: black; } .markdown-body h3, .markdown-body h4 { - font-size: 9pt; + font-size: 10pt; + color: black; } -.markdown-body ul +.markdown-body ul, ol { font-size: 9pt; + font-weight: normal; + color: black; line-height: 150%; } .markdown-body p @@ -47,5 +54,6 @@ } tt, code { + font-size: 9pt; font-family: Consolas,monospace } \ No newline at end of file diff --git a/hlp/menu_help.htm b/hlp/menu_help.htm index 4035f4c..4640316 100644 --- a/hlp/menu_help.htm +++ b/hlp/menu_help.htm @@ -25,7 +25,7 @@ Open the About Dn-FamiTracker dialog.

    Check for updates...
    - Sends a query to Github if a new release is published.

    + Sends a query to GitHub if a new release is published.


    Back to menus · interface · main index diff --git a/hlp/mmc5.htm b/hlp/mmc5.htm index 6281d8c..d744ffd 100644 --- a/hlp/mmc5.htm +++ b/hlp/mmc5.htm @@ -9,9 +9,12 @@ Nintendo MMC5
    -

    - Picture of the MMC5 chip

    +
    + Picture of the MMC5 chip + +

    About

    @@ -26,8 +29,9 @@ 7-bit DPCM DAC ($4011) requires constant attention from the emulated CPU core. This isn't practical with the current FamiTracker NSF driver or most drivers used in games. A driver and hardware setup tailored for PCM playback is required.

    - -

    A notable game using the MMC5 is Just Breed. A game which utilized the PCM channel is Shin 4-Nin Uchi Mahjong.

    + +

    + A notable game using the MMC5 is Just Breed. A game which utilized the PCM channel is Shin 4-Nin Uchi Mahjong.

    Check 2A03 for more details about the square channels.

    diff --git a/hlp/n163.htm b/hlp/n163.htm index 3031ccd..bd1b998 100644 --- a/hlp/n163.htm +++ b/hlp/n163.htm @@ -9,17 +9,21 @@ Namco 163
    -

    - Picture of the N163 chip

    +
    + Picture of the N163 chip + +

    About

    - This chip was created by Namco and contains up to eight wave channels. This chip - was earlier erroneously known as Namco 106 (which is the same chip but without - the audio capabilities). It was used in multiple Namco games, such as - Final Lap, King of Kings, Mappy Kids and Rolling Thunder.

    + The Namco Custom 163 IC ("N163", also known as "C163") was created by Namco and contains up to eight multiplexing wave channels. + This chip was earlier erroneously known as "Namco 106", which itself was erroneously assumed to exist.

    + +

    + It was used in multiple Namco games, such as Digital Devil Story: Megami Tensei II, Erika to Satoru no Yume Bouken, Final Lap, King of Kings, Mappy Kids, Rolling Thunder, and others.

    The chip has 128 bytes of RAM for waveform storage and channel registers. @@ -39,11 +43,14 @@ The rate for this channel switching is around 120 kHz, which means that when all 8 channels are enabled, there will be audible channel switching noise at 15 kHz (or 17 kHz when 7 channels are enabled). Some Namco carts do have a LP filter to deal with - this, but it did little to alleviate the high pitched noise, so it's still very audible. + this, but it did little to alleviate the high pitched noise, so it's still very audible.

    + +

    To avoid this, either disable multiplexing in the emulation configuration settings, or use a sufficient lowpass filter in the emulation configuration settings.


    +

    Instruments

    diff --git a/hlp/nsf_export.htm b/hlp/nsf_export.htm index 164cf17..23fbcad 100644 --- a/hlp/nsf_export.htm +++ b/hlp/nsf_export.htm @@ -8,18 +8,21 @@ NSF export


    - NSF (Nintendo Sound Format, invented by Kevin Horton) is a type of file used to represent NES music, - first developed for storing ripped game music. That means NSF is not a native - music format, instead it contains a small program that plays the music using the - NES's 6502 CPU. FamiTracker compresses and converts the module data - and attaches a player program when creating the NSF file. + NSF (Nintendo Sound Format, invented by Kevin Horton) is a type of file used to represent NES music, initially developed for storing ripped game music. That means NSF is not a native music format, but a small program that plays the music using the NES's CPU in a slightly similar hardware architecture.
    + Dn-FamiTracker compresses and compiles the module data and attaches a player program when exporing the NSF file.

    - To create NSF files, select Create NSF from the File menu to open the NSF export window. - The NSF file options contains some options related to the NSF file format: the - song information fields is the same as in the control panel. There is also a - system type option: NTSC, PAL or Dual. Select Dual if you want the NSF to be - playable on both types of system.

    + To export NSF files, select Create NSF from the File + menu to open the NSF export window.
    + The NSF file options contains some options related to the NSF file + format: the song information fields is the same as in the control + panel.
    + There is also a system type option: NTSC, + PAL or Dual. Select Dual if + you want the NSF to be playable on both NTSC and PAL systems.
    + The Add. data checkbox indicates generating supporting + assembly code to be used with ASM or BIN export when compiling an + NSF file from source.

    A few other formats beside NSF are also available:

    @@ -36,41 +39,42 @@
  • NSF2
    Creates an NSF-compatible file containing NSFe metadata. This - metadata can be safely ignored in older NSF players. + metadata is safely ignored in older NSF players.

  • NES
    Encapsulates an NSF into an NROM NES file that can be played in emulators or with flash carts like PowerPaks and Everdrives.
    - Note that only non-expansion audio, non-bankswitching modules - whose data is smaller than 32KB in total are allowed. + Note that only non-expansion audio, non-bankswitching modules + whose total data is smaller than 32KB are supported.

  • BIN
    Stores only the music data and DPCM samples in separate files - for use with NSF driver sources. Enable the Add. data checkbox - to generate assembly supporting files for NSF building. + for use with NSF driver sources.

  • PRG
    Creates a single 32 kB program ROM file, ready to be used with a - NROM-compatible cart for playback on NES hardware. + NROM-compatible cart for playback on NES hardware.
    + Note that only non-expansion audio, non-bankswitching modules + whose total data is smaller than 32KB are supported.

  • ASM
    Stores the music data and samples in CA65 assembly format that - can be used with driver sources. Enable the Add. data checkbox - to generate assembly supporting files for NSF building. + can be used with driver sources.
  • - As of version 0.3.5, an export plugin system has been added that - allows exporting to custom formats. New export targets will appear - in the drop-down menu when export plugin DLLs are added. As of Dn-FT - version 0.5.0.2, this has been disabled due to a potential security - attack vector.

    + As of Dn-FT version 0.5.0.2, the export plugin system has been disabled due to a potential security + attack vector.
    + In previous versions until vanilla 0.3.5, an export plugin system + was added that allows exporting to custom formats. New export + targets would appear in the drop-down menu when export plugin DLLs + were added.


    Back to interface · main index diff --git a/hlp/pattern_editor.htm b/hlp/pattern_editor.htm index e1674b6..040ecfe 100644 --- a/hlp/pattern_editor.htm +++ b/hlp/pattern_editor.htm @@ -10,48 +10,61 @@

    The pattern editor consists of all channels and has the following layout:

    - Screenshot of pattern editor
    + Screenshot of pattern editor +

    All fields except note, octave and effect letter are in hexadecimal.

    • Note and octave
      - Displays the note and octave, or the commands note cut (---) and note release (===). +

      + Displays the note and octave, or the commands note cut + (---) and note release + (===).

      • Note cut immediately silences the channel.
      • Note release activates the instrument release sequences.
      -
      - The editor must be in record mode to insert notes in this column, - toggle record / normal mode with the space key.
      - Notes are located on keyboard keys: Z = C, S = C#, X = D, D = D#, C = - E... (Q, 2, W is one octave higher)
      - Default key for note cut is '1' and note release is '§', but both can be - changed in the configuration window and general tab.
      - Octave can be stepped up and down with numpad keys '/' and '*'.
      -
      +

      + The editor must be in record mode to insert notes in this column, toggle record / normal mode with the space key.

      +

      + Notes are located on keyboard keys: + Z = C, + S = C#, + X = D, + D = D#, + C = E... + (Q, + 2, + W is one octave higher, for example)

      +

      + Default key for note cut is 1 and note release is \, but both can be changed in the configuration window and general tab.

      +

      + Octave can be stepped up and down with numpad keys / and *, but it can be configured in the Shortcuts configuration menu.

      +

      + Note: Notes with no assigned DPCM samples or notes that reaches beyond the pitch table will be displayed with a red color!

    • Instrument column
      - Instrument to use. The selected - instrument is automatically inserted unless the instrument mask option is - enabled (Edit menu). If cleared then the previous instrument will be used.
      - Note: Missing or incompatible instruments will be displayed with a red color!
      -
      +

      + Instrument to use. The selected instrument is automatically inserted unless the instrument mask option is enabled in the Edit menu. If cleared then the previous instrument will be used.

      +

      + A Hold Instrument command can be inserted by pressing the H key, which will write && on the instrument column. This command will hold any instrument envelope state from a previous note. This was implemented in FamiTracker 0.5.0 beta 3, and ported since 0CC-FamiTracker version 0.3.14.3.

      +

      + Note: Missing or incompatible instruments will be displayed with a red color!

    • Volume column
      - Sets the volume for the channel, range 0 - F. Only functional for channels that support volume control, - such as pulse and noise channels for 2A03.
      -
      +

      + Sets the volume for the channel, range 0 - F. Only functional for channels that support volume control, such as pulse and noise channels for 2A03.

    • Channel effects
      - Used for channel effects. Format is - Yxx, where Y - = effect type and xx = effect parameter. -
      Additional effect-columns can be used by clicking the arrows in the channel header.
      +

      + Used for channel effects. Format is Yxx, where Y = effect type and xx = effect parameter.

      +

      + Additional effect-columns can be used by clicking the arrows in the channel header.

      See this page for available effects.
    • @@ -59,7 +72,7 @@

      Use insert-key to insert rows and delete-key to delete rows. Backspace will remove the previous row. - Each field can be cleared by using the '-' (dash) key.

      + Each field can be cleared by using the - (dash) key.

      Channels can be muted by clicking it's name in the channel header, double clicking @@ -67,13 +80,29 @@ commands are Alt+F9 & Alt+F10.

      - Selections can be done in this area with support for drag and drop operations. For selections, these commands are available:
      - Ctrl+A (first time) = select whole channel, Ctrl+A (second time) = select all - channels
      - Ctrl+C = copy, Ctrl+X = cut, Ctrl+V = paste
      - Ctrl+mouse wheel = transpose
      - Shift+mouse wheel = shift instrument/volume/effect values up/down
      - Special commands: Use Shift+Copy to copy volume column as text.

      + Selections can be done in this area with support for drag and drop operations. For selections, these commands are available:

      +
        +
      • +

        + Ctrl+A (first time) = select whole channel, Ctrl+A (second time) = select all channels

        +
      • +
      • +

        + Ctrl+C = copy, Ctrl+X = cut, Ctrl+V = paste

        +
      • +
      • +

        + Ctrl+mouse wheel = transpose

        +
      • +
      • +

        + Shift+mouse wheel = shift instrument/volume/effect values up/down

        +
      • +
      • +

        + Special commands: Use Shift+Copy to copy volume column as text.

        +
      • +

      Additional keys can be found in key command-section.

      diff --git a/hlp/properties.htm b/hlp/properties.htm index f5222bd..bfb0c04 100644 --- a/hlp/properties.htm +++ b/hlp/properties.htm @@ -27,17 +27,14 @@

      Song editor

      Screenshot of Import file dialog

      - It is also possible to import module files as songs. Including - instruments is optional: if you choose to then the new instruments and sequences will be - added to the current project (it will not look for identical existing - instruments). If you choose not then only pattern data will be included, this is - used to combine multiple files where the same instrument set is - used.

      + It is also possible to import module files as songs. + Including instruments is optional: if you choose to then the new instruments and sequences will be added to the current project (it will not look for identical existing instruments). + If you choose not then only pattern data will be included, this is used to combine multiple files where the same instrument set is used.

      - You can also import grooves and the - detune table from the module file. - Note that importing the detune table will overwrite the existing table.

      + You can also import grooves and the + detune table from the module file. + Note that importing the detune table will overwrite the existing table.

      Expansion sound checkboxes

      @@ -50,7 +47,8 @@

      Expansion sound checkboxes

      for the module. Any combination of expansion chips may be enabled.

      - The channel count selector is only available for Namco 163.

      + The channel count selector is only available for + Namco 163.

      Device mixer

      @@ -84,10 +82,14 @@

      Vibrato settings

      Screenshot of vibrato settings section

      - As of vanilla version 0.3.5, a new vibrato style is available. The new - style is bending both up and down, as opposed to down only with the old style. - The new style is default for new songs and the old style will be default for files created with earler versions of - vanilla Famitracker. Here it's possible to change the style as you wish.

      + There are two styles of vibrato. The new style bends the pitch both up + and down, while the old style bends only bends the pitch down. +
      + The new style is set by default for new songs while the old style is + set by default for files created with earler versions of vanilla + Famitracker. Here it's possible to change the style as you wish. +
      + The new style was implemented since vanilla version 0.3.5.

      Pitch mode settings

      @@ -95,9 +97,11 @@

      Pitch mode settings

      Screenshot of vibrato settings section

      + Linear pitch treats all pitch effects on melodic channels uniformly by + subdividing each semitone into 32 equal parts. +
      As of vanilla version 0.4.0, linear pitch was added but not available. - It is implemented in 0CC version 0.3.14.2. Linear pitch treats all pitch effects - on melodic channels uniformly by subdividing each semitone into 32 equal parts.

      + It is implemented in 0CC version 0.3.14.2.


      Back to interface · main index diff --git a/hlp/sound.htm b/hlp/sound.htm deleted file mode 100644 index 6d9af9f..0000000 --- a/hlp/sound.htm +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - Sound hardware
      - -
      -
      - This section explains the sound hardware in NES/Famicom and some of the - expansion chips found in some carts.
      -
      - - -
      -
      - - Internal 2A03/2A07 channels
      -
      -
      - -
      -
      - - The sound processor has five channels, two square waves, - one triangle wave, one noise generator and one digital sample (DPCM) channel.
      -
      - Square 1 & 2
      -
      -
      Produces pulse waves with four duty settings (12.5%, 25%, - 50% and 25% inverted). - These channels have a hardware sweep unit that can be accessed by the H and I effects.
      - Note: There is a bug that resets the duty phase when switching between - certain frequencies, this can be heard as a pop and might be noticable when - using vibrato or pitch slides across those frequencies.
      -
      - Triangle
      -
      -
      Triangle shaped waveform. There is no volume control for this channel, - however, due to how the hardware is implemented, the output level of the DPCM - channel will affect the volume output of the triangle wave.
      -
      - Noise
      -
      -
      Noise generator. Can produce 32k-bit and 93-bit sequences, selectable - from the instruments duty/noise setting.
      -
      - DPCM (Delta PCM)
      -
      -
      Used to play delta modulated samples. Most of the effects (like arpeggio & pitch slides) does - not operate on this channel.
      -
      -
      - Expansion sound
      -
      - The Famicom has the ability to mix sound from expansion chips found in some - carts, famitracker now supports a few of those chips. Expansion sound is enabled from the module properties window.
      -
      - - Konami VRC6
      -
      - -
      -
      The VRC6 chip has two square wave channels and one sawtooth wave - channel. This chip was used in games like Akumajou Densetsu and Madara by - Konami.
      -
      - Square 1 & 2
      -
      -
      - Produces pulse waves like the internal channels, but have eight different duty - settings and lacks hardware sweep.
      -
      - Sawtooth
      -
      -
      Sawtooth wave generator. This channel has no duty function but - still uses that instrument setting to calculate the volume. A volume level too - high will cause the wave to wrap around and sounds distorted (happens when duty - = 1 and volume = 6).
      -

      - Konami VRC7

      -

      - The VRC7 chip contains a stripped down OPLL unit and has 6 channels for FM - sound. This chip was used by Lagrange Point.

      -

      - Nintendo FDS

      -

      - This is a single channel chip used in the Famicom Disk System hardware by - Nintendo. The channel uses a 64-step customizable waveform and has a simple - frequency modulator.

      -

      - Nintendo MMC5"> - Nintendo MM The MMC5 chip has two square wave channels that are identical to the internal - 2A03 channels except for no hardware sweep function. It was used in the game - Just Breed by Enix.

      - - - - diff --git a/hlp/sound_overview.htm b/hlp/sound_overview.htm index fe76dd5..74791fc 100644 --- a/hlp/sound_overview.htm +++ b/hlp/sound_overview.htm @@ -9,37 +9,37 @@ Sound hardware

      Overview

      - +

      - The programmable sound generator found inside the - NES and Famicom is located inside the CPU chip (called 2A03 for NTSC and 2A07 for - PAL).

      - + The programmable sound generator found inside the + NES and Famicom is located inside the CPU chip (called 2A03 for NTSC + and 2A07 for PAL).

      + - + External sound hardware - +

      - The Famicom had the possibillity to mix audio from - cartridges, this was used by some games to add extra sound channels - from chips in cartridges. Some of these - chips are supported by Dn-Famitracker and is enabled from the - module properties dialog. Multiple expansion chips - enabled at the same time is at this moment not supported.

      - + The Famicom has the possibillity to mix "expansion audio" from + cartridges. This was used by some games to add extra sound channels + from integrated circuits in cartridges. +
      + Six expansion audio ICs are supported by Dn-Famitracker and + can be enabled from the + module properties dialog. + Multiple expansion chips can be enabled at the same time.

      +

      - To create instruments for - these channels, select the channel with the pattern cursor and then add new - instrument.

      - + To create instruments for + these channels, select the channel with the pattern cursor and then add + a new instrument.

      +

      - The following sections explains the hardware and + The following sections explains the hardware and instruments:

      - + - -
      + +

      - Note: External sound is not possible on the NES without hardware - modification, so all songs using expansion chips should be treated as - "Famicom Sound", and thus is not strictly "NES Sound". Additionally, all - expansion chips cannot be run in PAL mode. + Note: External sound is not possible on the NES without + significant modification, so any songs using expansion chips are + considered "Famicom Sound" instead of "NES Sound". Additionally, + all expansion chips are not supported in PAL mode.

      diff --git a/hlp/style.css b/hlp/style.css index f295070..ecfb82f 100644 --- a/hlp/style.css +++ b/hlp/style.css @@ -81,7 +81,7 @@ table.default width: 100%; background-color: #FCFCFC; } -td.highlight +td.highlight, th.highlight { background-color: #E0E0E0; height: 22px; diff --git a/hlp/sunsoft.htm b/hlp/sunsoft.htm index 988a417..93632aa 100644 --- a/hlp/sunsoft.htm +++ b/hlp/sunsoft.htm @@ -1,127 +1,145 @@ - - - - - - Sunsoft 5B -
      + + + + + + Sunsoft 5B +
      -

      - Picture of the S5B chip

      +
      + Picture of the S5B chip + +
      -

      About

      -

      - The Sunsoft 5B is a chip manufactured by Yamaha, for Sunsoft. While used - interchangeably with the Sunsoft FME-7, and the Sunsoft 5A, the only game - to utilize the audio was in the Famicom game Gimmick!. Due to Yamaha's - manufacturing, it is a clone of their own chip, the YM2149F, which itself is a - clone of the AY-3-8910. The chip has 3 channels of audio, capable of - Tone (square waves), 32 pitches of Noise, and a user configurable Envelope - generator. However, despite these features, Gimmick! only used the Tone - capabilities of the chip. -

      -
      -

      Instruments

      - -

      - Instruments on the Sunsoft 5B are fairly close to the 2A03. However the - biggest difference lies in the Noise/Mode macro, which replaces the Duty - macro present on the 2A03. This macro allows one to toggle noise, tone, - and envelope on the channel, also allowing one to freely mix between the - three. -
      - Another major change from the 2A03's instruments lies in the volume. - While the 2A03's design gives it linear volume, the Sunsoft 5B has - what is "exponential volume", which behaves differently than the 2A03's - linear volume. - -

      -
      -

      Noise/Mode Macro

      - -

      - The Noise/Mode macro present in Dn-FT is relatively simple. There are three - bars, one for each "mode", which can be freely toggled. Above is a slider - allowing for the user to define what specific pitch they want, of the 32 - available pitches. For reference, the Blue bar is for Tone, the Pink is for - Noise, and the Yellow bar is for Envelope. -

      -
      -

      5B Envelopes

      -

      The Sunsoft 5B has a configurable envelope generator, able to - play back 16 preset envelope sets. The table below shows each envelope and - its functions. -

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      H0y Hex CommandEnvelope ShapeEnvelope Description
      $0 to $3|\________A one-shot decay envelope. Usually used at extremely low frequencies mixed with tone to produce a hardware decay envelope.
      $4 to $7/|________A one-shot attack envelope.
      $8|\_|\_|\_|\_Looped decay envelope. Functionally identical to a sawtooth wave at audible frequencies.
      $9|\________Identical to $0.
      $A\/\/\/\/\/\/\/Looped Decay and Attack envelope. Identical to a symmetrical sawtooth wave, referred to as a "triangle" wave.
      $B\|‾‾‾‾‾‾‾‾One-shot decay envelope. Holds the output at maximum volume when finished.
      $C_/|_/|_/|_/|Looped attack envelope. Functionally identical to envelope $8 at audible frequencies.
      $D|/‾‾‾‾‾‾‾‾One-shot attack envelope. Holds the output at maximum volume when finished.
      $E/\/\/\/\/\/\/\Looped Attack and Decay envelope. Virtually identical to $A.
      $F/|________Identical to $4.
      +

      About

      +

      + The Sunsoft 5B is a chip manufactured by Yamaha, for Sunsoft. While + used interchangeably with the Sunsoft FME-7, and the Sunsoft 5A, + the only game to utilize the audio was in the Famicom game + Gimmick!. Due to Yamaha's manufacturing, it is a clone of their own + chip, the YM2149F, which itself is a clone of the AY-3-8910.

      -
      +

      + The chip has 3 channels of audio, capable of Tone (square waves), + 32 pitches of Noise, and a user configurable Envelope generator. + However, despite these features, Gimmick! only used the Tone + capabilities of the chip.

      + +
      + +

      Instruments

      + +

      + Instruments on the Sunsoft 5B are fairly close to the 2A03. However + the biggest difference lies in the Noise/Mode macro, which replaces + the Duty macro present on the 2A03. This macro allows one to toggle + noise, tone, and envelope on the channel, also allowing one to + freely mix between the three.

      + +

      + Another major change from the 2A03's instruments lies in the + volume. While the 2A03's design gives it linear volume, the Sunsoft + 5B has what is "exponential volume", which behaves differently than + the 2A03's linear volume

      + +

      + The 4-bit exponential volume control of the 5B increases or + decreases the volume of a channel equal steps of around 3dB. Each + step from one level to the next in exponential volume sounds + perceptibly louder by exactly the same amount. This is in contrast + to linear volume, where higher levels sound roughly the same but + lower levels have large swells in volume from one step to the next. + This also means you can set a channel 2 times louder or quieter by + adding or subtracting 2 to the volume, instead of needing to input + half or double of a linear volume value.

      + +
      + +

      Noise/Mode Macro

      + +

      + The Noise/Mode macro present in Dn-FT is relatively simple. There are three + bars, one for each "mode", which can be freely toggled. Above is a slider + allowing for the user to define what specific pitch they want, of the 32 + available pitches. For reference, the Blue bar is for Tone, the Pink is for + Noise, and the Yellow bar is for Envelope. +

      +
      +

      5B Envelopes

      +

      + The Sunsoft 5B has a configurable envelope generator, able to play back 16 preset envelope sets. The table below shows each envelope and its functions.

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      H0y Hex Command + Envelope Shape + Envelope Description +
      $0 to $3|\________A one-shot decay envelope. Usually used at extremely low frequencies mixed with tone to produce a hardware decay envelope.
      $4 to $7/|________A one-shot attack envelope.
      $8|\_|\_|\_|\_Looped decay envelope. Functionally identical to a sawtooth wave at audible frequencies.
      $9|\________Identical to $0.
      $A\/\/\/\/\/\/\/Looped Decay and Attack envelope. Identical to a symmetrical sawtooth wave, referred to as a "triangle" wave.
      $B\|‾‾‾‾‾‾‾‾One-shot decay envelope. Holds the output at maximum volume when finished.
      $C_/|_/|_/|_/|Looped attack envelope. Functionally identical to envelope $8 at audible frequencies.
      $D|/‾‾‾‾‾‾‾‾One-shot attack envelope. Holds the output at maximum volume when finished.
      $E/\/\/\/\/\/\/\Looped Attack and Decay envelope. Virtually identical to $A.
      $F/|________Identical to $4.
      + +
      - Back to sound hardware · - main index - - + Back to sound hardware · + main index + + \ No newline at end of file diff --git a/hlp/update-changelog-htm.bat b/hlp/update-changelog-htm.bat deleted file mode 100644 index e1f049f..0000000 --- a/hlp/update-changelog-htm.bat +++ /dev/null @@ -1,2 +0,0 @@ -@REM invoke this inside Dn-help/hlp -powershell -Command "(Get-Content changelog_shell.htm).Replace('PATCH CHANGELOG HERE', (pandoc ..\..\CHANGELOG.md -f gfm -t html5)) | Set-Content -encoding UTF8 changelog.htm" diff --git a/hlp/update-htm-templates.bat b/hlp/update-htm-templates.bat new file mode 100644 index 0000000..02eb782 --- /dev/null +++ b/hlp/update-htm-templates.bat @@ -0,0 +1,12 @@ +@REM invoke this inside Dn-help/hlp +@echo off +pandoc ..\..\CHANGELOG.md -f gfm -t html5 > temp.txt +python ..\htm-patcher.py changelog-template.htm changelog.htm temp.txt "PATCH HERE PLEASE" +del temp.txt +pandoc ..\..\LICENSE.md -f gfm -t html5 > temp.txt +python ..\htm-patcher.py license-template.htm license_temp.htm temp.txt "PATCH HERE FIRST" +del temp.txt +pandoc ..\..\Source\drivers\asm\LICENSE.md -f gfm -t html5 > temp.txt +python ..\htm-patcher.py license_temp.htm license.htm temp.txt "PATCH HERE SECOND" +del temp.txt +del license_temp.htm diff --git a/hlp/vrc6.htm b/hlp/vrc6.htm index 99f7139..4349406 100644 --- a/hlp/vrc6.htm +++ b/hlp/vrc6.htm @@ -5,12 +5,13 @@ - Konami VRC6
      -

      - Picture of the VRC6 chip

      +
      + Picture of the VRC6 chip + +

      About

      @@ -19,6 +20,8 @@ channel. This chip was used in games as Akumajou Densetsu and Madara by Konami.

      +
      +

      Pulse 1 and 2

      diff --git a/hlp/vrc7.htm b/hlp/vrc7.htm index 8018716..9046938 100644 --- a/hlp/vrc7.htm +++ b/hlp/vrc7.htm @@ -3,21 +3,17 @@ - Konami VRC7


      -

      - Picture of the VRC7 chip

      +
      + Picture of the VRC7 chip + +

      About

      @@ -25,34 +21,36 @@ The VRC7 chip contains a customized OPLL unit (YM2413) that has 6 channels for frequency modulation synthesis. The sound capabilities of this chip was only used in the game Lagrange Point by Konami, with the other game (Tiny Toon Adventures 2) using it for standard memory management.

      - -

      - Much like the Sunsoft 5B, this chip was produced by Yamaha, under the product code DS1001.

      + +

      + Much like the Sunsoft 5B, this chip was produced by Yamaha, under the product code DS1001.

      This chip has 15 predefined patches and can hold one user defined patch, - the predefined patches are - customized for VRC7 and are not the default ones for - YM2413.

      + the predefined patches are customized for VRC7 and are not the default + ones for YM2413.

      - Note cut command will clear the key on flag, note release command will clear the - key on flag but keep the sustained flag.

      + Note cut command will clear the key on flag, note release command will + clear the key on flag but keep the sustained flag.

      Note: - The chip is limited to only one user - defined patch, so it's not possible to simultaneously use different user defined + The chip is limited to only one user defined patch, so + it's not possible to simultaneously use different user defined patches in different channels! See documents about YM2413 if you need more information.

      - The available headroom range is limited by this chip and clipping will occur when the total level is too loud, - this occurs already when two channels are running at maximum volume, so keep the volume levels down. + The available headroom range is limited by this chip and clipping + will occur when the total level is too loud, this occurs already + when two channels are running at maximum volume, so keep the volume + levels down.


      +

      Instruments

      @@ -65,256 +63,271 @@

      Use copy/paste to create and read MML strings from the clipboard of the - patch settings.

      + patch settings. Through the textbox, you may also directly edit the MML + patch bytes, or select and copy/paste the patch byte strings.

      The custom patch settings are enabled when patch 0 is selected and are used to customize the modulator and carrier oscillator, but it will also display the settings for the internal patches.

      - Note: when using sustained patches, use the note cut command to move on - to the release phase. The note release command will also release the note, but - does so at a fixed rate.

      + Note: when using sustained patches, use the note cut + command to move on to the release phase. The note release command will + also release the note, but does so at a fixed rate.

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      - Parameter - Description - Range
      - Attack, Decay, Sustain, Release - ADSR envelope for the volume level. - 0 - 15
      - Amplitude modulation - Applies a fixed tremolo effect at 3.7 Hz - on / off
      - Vibrato - Applies a fixed vibrato effect at 6.4 Hz - on / off
      - Sustained - Switch between sustained and percussive tone - on / off
      - Key scaling - Increases the ADSR rate for higher pitches - on / off
      - Key scaling level - The attenuation level for key scaling, according to table 2 - 0 - 3
      - Wave rectification - Half-wave rectification of the sine wave - on / off
      - Multiplication factor - Multiplies the pitch by a factor, according to table 3 - 0 - 15
      - Feedback - Modulator feedback level - 0 - 7
      - Modulator Level - Modulator mixing level - 0 - 31
      + Table 1, Instrument parameters +
      + Parameter + + Description + + Range +
      + Attack, Decay, Sustain, Release + ADSR envelope for the volume level. + 0 - 15
      + Amplitude modulation + Applies a fixed tremolo effect at 3.7 Hz + on / off
      + Vibrato + Applies a fixed vibrato effect at 6.4 Hz + on / off
      + Sustained + Switch between sustained and percussive tone + on / off
      + Key scaling + Increases the ADSR rate for higher pitches + on / off
      + Key scaling level + The attenuation level for key scaling, according to table 2 + 0 - 3
      + Wave rectification + Half-wave rectification of the sine wave + on / off
      + Multiplication factor + Multiplies the pitch by a factor, according to table 3 + 0 - 15
      + Feedback + Modulator feedback level + 0 - 7
      + Modulator Level + Modulator mixing level + 0 - 31
      - Table 1, Instrument parameters

      - +
      + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + +
      + Table 2, Key Scale Level Table +
      + Value - + Rate
      - 0 - 0 dB/oct
      - 1 - 1.5 dB/oct
      - 2 - 3 dB/oct
      - 3 - 6 dB/oct
      + 0 + 0 dB/oct
      + 1 + 1.5 dB/oct
      + 2 + 3 dB/oct
      + 3 + 6 dB/oct
      - Table 2, Key Scale Level Table

      - +
      + - - + - - - - - - - - - - - - - - -
      + Table 3, Multiplication factor table +
      Value + Factor
      0 - ½ + ½
      1 + 1
      2 + 2
      3 + 3
      4 + 4
      5 + 5
      6 + 6
      7 + 7
      8 + 8
      9 + 9
      10 + 10
      11 + 10
      12 + 12
      13 + 12
      14 + 15
      15 + 15
      - Table 3, Multiplication factor table -


      diff --git a/htm-patcher.py b/htm-patcher.py new file mode 100644 index 0000000..8f0f780 --- /dev/null +++ b/htm-patcher.py @@ -0,0 +1,20 @@ +# htm-patcher +# patches templates with pandoc converted markdown +# Copyright 2026 Persune, MIT +import argparse, pathlib + +parser = argparse.ArgumentParser() +parser.add_argument("input", type=pathlib.Path) +parser.add_argument("output", type=pathlib.Path) +parser.add_argument("patch", type=pathlib.Path) +parser.add_argument("search_string", type=str) +args = parser.parse_args() + +with open(args.input, mode="r", newline="\n", encoding="utf-8") as input: + with open(args.output, mode="w", newline="\n", encoding="utf-8") as output: + for line in input: + if args.search_string in line: + with open(args.patch, mode="r", newline="\n", encoding="utf-8") as patch: + [output.write(patches) for patches in patch] + else: + output.write(line)