Commit graph

4404 commits

Author SHA1 Message Date
tildearrow
3d8b30f7f9 GUI: new pattern renderer, part 18
demandScrollX, the warning and something else
2026-01-04 05:26:15 -05:00
tildearrow
a9bb65feef GUI: new pattern renderer, part 17
working visualizer
2026-01-04 02:42:32 -05:00
tildearrow
1ad8b08054 GUI: new pattern renderer, part 16
non-working visualizer
2026-01-03 22:08:22 -05:00
tildearrow
17f4ef081b GUI: new pattern renderer, part 15
clip rect almost there
still a tiny oddity present
2026-01-03 16:55:56 -05:00
tildearrow
351a47871f GUI: new pattern renderer, part 14
(mostly) fix channel headers
also fix row number

clip rect still wrong
2026-01-03 04:57:58 -05:00
tildearrow
9ae092ed70 GUI: new pattern renderer, part 13
paste channel header code
guaranteed not to work
2026-01-02 20:14:49 -05:00
tildearrow
1ced369a34 GUI: new pattern renderer, part 12
prepare for channel headers
2026-01-01 22:57:46 -05:00
tildearrow
f55e244760 GUI: new pattern renderer, part 11
clipping
2026-01-01 22:47:00 -05:00
tildearrow
b8f378e20a GUI: new pattern renderer, part 10
prepare for frozen items
once this reaches feature parity I'll merge and begin field trials
2026-01-01 21:04:02 -05:00
tildearrow
308be1bf39 GUI: new pattern renderer, part 9
selection and input (no hover yet)
2026-01-01 17:56:54 -05:00
tildearrow
a572fee4e6 GUI: new pattern renderer, part 8
cursor/pointer early work
2025-12-31 20:09:47 -05:00
tildearrow
61e3b1c4f2 GUI: new pattern renderer, part 7
it still doesn't work
2025-12-31 06:38:10 -05:00
tildearrow
8764f1866f GUI: my battery is low 2025-12-30 20:11:13 -05:00
tildearrow
f9365a3804 GUI: new pattern renderer, part 6
bullshit that doesn't work
2025-12-30 20:09:30 -05:00
tildearrow
96ff998278 GUI: new pattern renderer, part 5
stuff
2025-12-30 19:02:02 -05:00
tildearrow
aec2389f03 GUI: new pattern renderer, part 4
borders and highlight
2025-12-30 17:26:38 -05:00
tildearrow
591a205a18 GUI: new pattern renderer, part 3
dummy rows
2025-12-30 15:54:35 -05:00
tildearrow
95b536f47e GUI: new pattern renderer, part 2
some scrolling
2025-12-30 01:45:57 -05:00
tildearrow
474f80396b GUI: new pattern renderer, part 1
prototype with no scroll or selection
2025-12-27 19:47:31 -05:00
tildearrow
4db4509621 GUI: prepare for new pattern renderer
likely two stages, depending on how efficient the first one is

stage 1:
- no more Selectables
- using ImDrawList to draw the pattern
  - perhaps even bypassing that and directly firing quads at the draw queue

stage 2:
- using textures and tiles to draw the pattern
2025-12-27 18:16:33 -05:00
tildearrow
240d3c5718 GUI: use an accumulator for wave synth preview
issue #2735
2025-12-27 17:30:19 -05:00
tildearrow
03bdabf7a6 GUI: fix N163 initial chan count mismatch 2025-12-26 18:25:50 -05:00
tildearrow
34b06855cd update Dear ImGui to 1.92.5 - READ
there are some text changes which may break text undo/redo.
testing needed.
2025-12-26 18:12:14 -05:00
tildearrow
eaa254ca6f input scale debug info 2025-12-20 15:18:53 -05:00
tildearrow
0029847a31 file picker: fix confirm overwrite 2025-12-18 16:21:12 -05:00
Eknous-P
d4bfce770a add the clock rate text for saa1099 clock selector 2025-12-12 01:12:36 +04:00
Eknous-P
927ed4b829 fix strings 2025-12-08 21:47:39 +04:00
Eknous-P
19c78955bb option to change the piano hit key color mode 2025-12-07 21:31:23 +04:00
tildearrow
4a9713e2db nobody uses a hyphen 2025-12-02 15:52:13 -05:00
Eknous-P
b6ef50f89a fix division by 0 2025-11-29 13:27:56 +04:00
Eknous-P
3de64c3c37 fix sample map sample number clamping
potentially
2025-11-26 23:51:12 +04:00
Eknous-P
c258c50758 fix piano keys sometimes turning black 2025-11-25 12:54:02 +04:00
tildearrow
eca315b99a prepare for supporting channel count in user syste
ms
2025-11-24 20:48:22 -05:00
Electric Keet
4e2477e8ba Revised default dialog positions.
Thanks, Eknous!
2025-11-23 11:07:38 -05:00
Electric Keet
4409e1070d Oops. Removing duplicate entry.
Forgot to check for dupes!
2025-11-23 11:07:38 -05:00
Electric Keet
6ebbf76dc7 Default positions for new dialogs.
I've tested these as best I can, but my display scaling might have confounded my attempts. Please test before merging!
2025-11-23 11:07:38 -05:00
tildearrow
54b31f7fc1 get rid of the hack 2025-11-23 10:59:49 -05:00
tildearrow
ff1aad8959 limit the maximum speed
too high and it will never seek
2025-11-21 20:16:07 -05:00
tildearrow
de0a4e652a add button to access macro menu on mobile 2025-11-21 16:42:00 -05:00
Eknous-P
f61f9efccf chan color in sys manager 2025-11-21 23:17:33 +04:00
Eknous-P
1d331f451c compiler warning paranoia 2025-11-21 22:58:14 +04:00
tildearrow
6ad8a0893b dev240 - Merge branch 'inf2' - READ
this introduces several major changes to Furnace. I hope this message explains everything.

**File Format Changes**

a new song info header (`INF2`) has been introduced, which:
- cleans up the mess I made when adding sub-songs to Furnace
- allows better forward compatibility and extensibility
- uses 16-bit chip IDs
- moves compatibility flags to another block and is stored as a DivConfig
- stores channel count in the file, allowing chips with dynamic channel count (e.g. Namco 163)

a new sub-song data block has been introduced as well.

check out papers/format.md for information.

**Furnace Changes**

TimeBase ("Divider" in the UI) has been REMOVED. it was a DefleMask leftover.
to compensate, the speeds are now 16-bit. older songs will have their speeds converted, but this may fail if you use grooves or change speed mid-song.

dynamic channel count support has been added. the following chips are currently supported:
- Namco 163 (1-8 channels)
- ES5506 (5-32 channels)
- Generic PCM DAC (1-128 channels, with software mixing!)

channel colors have been added (thanks Eknous!).

SegaPCM (compatible 5-channel mode) and Neo Geo CD have been REMOVED. when loading previous files, including .dmf ones, these will have compatible SegaPCM and Neo Geo CD chips converted to normal SegaPCM and YM2610 respectively.
their channel count remains unaltered though. you can fix this by going into the chip manager and clicking the button next to "irregular channel count" in each chip config section.

**Code Changes**

a couple refactors have been made for the sake of code cleanliness and depending less on DivEngine...

=> Chip Channel Count

two new values, adjacent to the channel count, have been added to DivSysDef.
these specify the minimum and maximum channel count for a chip.

if your chip doesn't require dynamic channels, feel free to set these to the channel count.

for example, here's an old definition:

```
sysDefs[DIV_SYSTEM_NES]=new DivSysDef(
  _("NES (Ricoh 2A03)"), NULL, 0x06, 0x06, 5 /* channel count*/, false, true, 0x161, false, (1U<<DIV_SAMPLE_DEPTH_1BIT_DPCM)|(1U<<DIV_SAMPLE_DEPTH_8BIT), 0, 0,
  ...
```

and here's how it looks now:

```
sysDefs[DIV_SYSTEM_NES]=new DivSysDef(
  _("NES (Ricoh 2A03)"), NULL, 0x06, 0x06, 5 /* nominal channel count*/, 5 /* min channels */, 5 /* max channels */,
  false, true, 0x161, false, (1U<<DIV_SAMPLE_DEPTH_1BIT_DPCM)|(1U<<DIV_SAMPLE_DEPTH_8BIT), 0, 0,
  ...
```

=> New Channel Definition

a new way to define chip channels has been introduced, replacing the old one.
it looks cleaner and is more flexible (even supporting dynamic channel count).

it works by defining a function in the chip definition, which returns a DivChanDef with channel information (name, short name, type and instrument type(s)).
alternatively, a list can be provided in the DivChanDefFunc() constructor, in the event channels differ greatly and/or the number of channels is small.
for example, if your chip's channel definition code looked like this:

```
{_("Pulse 1"), _("Pulse 2"), _("Triangle"), _("Noise"), _("DPCM")}, // names
{"S1", "S2", "TR", "NO", "DMC"}, // short names
{DIV_CH_PULSE, DIV_CH_PULSE, DIV_CH_WAVE, DIV_CH_NOISE, DIV_CH_PCM}, // types
{DIV_INS_NES, DIV_INS_NES, DIV_INS_NES, DIV_INS_NES, DIV_INS_NES}, // ins types
{DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_NULL, DIV_INS_AMIGA}, // secondary ins types
```

now they look like this:

```
DivChanDefFunc({
  DivChanDef(_("Pulse 1") , "S1" , DIV_CH_PULSE, DIV_INS_NES),
  DivChanDef(_("Pulse 2") , "S2" , DIV_CH_PULSE, DIV_INS_NES),
  DivChanDef(_("Triangle"), "TR" , DIV_CH_WAVE , DIV_INS_NES),
  DivChanDef(_("Noise")   , "NO" , DIV_CH_NOISE, DIV_INS_NES),
  DivChanDef(_("DPCM")    , "DMC", DIV_CH_PCM  , DIV_INS_NES, DIV_INS_AMIGA)
}),
```

some helper templates, such as stockChanDef and simpleChanDef also exist, which automatically map channel names and types regardless of count.
this is useful if all your channels happen to be named "Channel 1", "Channel 2" and so on, while sharing the same type and instrument type (this is the case for many sampler chips).

if you've been working on a custom chip, make sure to adapt your chip definitions.

=> More Chip Definition Changes

the DivSystem enum is now in src/engine/sysDef.h

channel definitions are cached in the DivSong.

=> Reducing Dependency on DivEngine

many functions have been moved away from DivEngine where possible. these include:

- recalcChans() (now on DivSong)
  - chans, sysOfChan, dispatchOfChan, dispatchChanOfChan and dispatchFirstChan have been moved to DivSong as well.
- asset dir storage/modification/check finctions (now on src/engine/assetDir.cpp)
- DivEngine::getSystemDef() is now a static function, so it can be called without a DivEngine (engine still has to initialize systems first!)

IMPORTANT: hasLoadedSomething is no longer set in recalcChans() because it is part of DivEngine. if you have import code, MAKE SURE TO SET hasLoadedSomething TO true AFTER SWITCHING THE SONG (song=ds).

=> Dynamic Channel Count

a new array called systemChans[] has been added to DivSong, allowing you to define the number of channels for each chip.
if you change this, make sure to call recalcChans() afterwards.

if you use dispatchChanOfChan[], treat `-1` as "no channel". this is set when the channel count is higher than the chip's maximum.

if you're working on import code, and are certain you won't use dynamic channel count, call DivSong::initDefaultSystemChans() before recalcChans(). this will set up default channel counts for you.
otherwise, set systemChans[] appropriately.
2025-11-21 11:26:27 -05:00
tildearrow
fea3bab550 Merge branch 'chanColorsEtc' into inf2 2025-11-21 10:51:44 -05:00
tildearrow
47e2910498 giga-refactor, part 20
convert compat SegaPCM to normal SegaPCM with 5 channels
convert Neo Geo CD to YM2610
2025-11-21 04:58:56 -05:00
Eknous-P
62afabbc0b GBA DMA: initalize wtMem to 0 on reset 2025-11-21 13:09:38 +04:00
tildearrow
26993d2b40 giga-refactor, part 19
fix Namco 163 stuff
2025-11-19 19:35:18 -05:00
Eknous-P
0d396d4416 fix sample list right click, again
pls dont crash...
2025-11-19 17:07:22 +04:00
tildearrow
f1a3295a78 giga-refactor, part 18
ES5506 and Namco 163 channel count improvements
2025-11-19 05:20:32 -05:00
Eknous-P
afb9b07f3b join the vectors into one 2025-11-19 14:05:00 +04:00
tildearrow
24aa37c66f ...... 2025-11-19 01:26:18 -05:00