I spent part of this morning happily not hung over and with all my fingers in-tact (fireworks were exploded responsibly). While I still have core features to work on, I've been wanting to start chipping away at some pesky things that I need to finish before I can slap a "Beta" tag on the project and managed to solve 2 things:
Scrolling now works on VERA and FM instruments
The filename on the save/load screen works properly
I would imagine some folks many not have even know there were more than 32 PSG and FM instruments supported but in reality up to 128 are at present! The UI now allows for scrolling through these. Currently only with the arrow keys but I'll add page-up/down and home/end for faster nav (and maybe even an ALT-# kinda like I have for the pattern view to jump around).
Secondly, it's been a pesky (actually a ... wait for it ... PETSCII) bug where deleting characters on the filename section of the load/save screen wouldn't actually work. Had to do with character conversions. Quite happy that's now fixed as that was quite an annoying little bugger.
More to come but these were pretty substantial so thought I would share. It's not in an official release yet so folks wanting to try these will have to build from the source for now.
Re: DreamTracker Dev Log
Posted: Sat Jan 20, 2024 7:06 pm
by m00dawg
0.64a is out!
This release features some cleanups in preparation for beta, changes how PSG pitch is stored internally (to align with the FM) and adds a pitch speed setting for instruments (updateable via a pattern effect as well) for faster pitch sweeps and glides. That is also prep for finally having pitch envelopes working.
I'd like to have pitch envelopes for the beta, but the table/macro feature may be post beta. The data structures are there which means it probably won't require a file format update (that's the main thing I want to avoid in the beta). We'll see! Beta is my commitment to song compatibility for the rest of 1.x. That doesn't mean the file format won't change, just that I'll commit to having a means to up-convert songs. Things to be done before that will be better pattern effect organization as the layout is a little nonsensical, adding a bit more metadata to song files (in part so it's easier to upgrade the file format later on). And lots and lots of polish.
Under the covers features include some minor efficiency improvements, switching away from the bit instructions available on the 65C02 but not on the 65816, and 816 support. 816 support is controlled in the project by ca65 defines and are not enabled for the current distributed version (but can be built from the source). At present it just picks a different `add16` and `sub16` macro along with setting up native mode at boot. This was in part for the 816 upgrade exploration happening on the #cpu-65816 channel on Discord.
EDIT: Realized I should perhaps elaborate on the next feature (pitch envs). At present there are 32 envelopes supported and the same envelopes can be used for volume, width (PWM), and soon pitch. Vol and width will go from 00-3F with the high bits (eventually) being used as additional modulation (L/R and waveform). PWM will use the full value, but will be signed. I'll have a keyboard combo (probably Left ALT-M) to switch between the views.
Quick mockup of the full pitch view:
Screenshot from 2024-01-20 13-56-03.png (38.68 KiB) Viewed 5985 times
EDIT 2: Also realized I forgot to mention global transpose. That's also now available in song options plus in the pattern.
Re: DreamTracker Dev Log
Posted: Mon Jan 22, 2024 10:59 pm
by m00dawg
Pitch envelopes implemented!
A bit of a milestone since they've been a long time coming and I'm rather happy with the solution. I was fretting over coarse vs fine but opted to use pitch speed as I mentioned in my previous post as means to control that. Other challenge was drawing the bipolar graph. That didn't end up being difficult necessarily but it did take some fiddling. Also gave me a chance to optimize the code just a bit too.
Screenshot from 2024-01-22 16-53-05.png (40.65 KiB) Viewed 5807 times
This is what the "full" envelope looks like. That is an interpretation on the set of data. The "short" view is positive only and goes from 00-3F (for volume and pitch) with the high bits being for L/R and waveform selections. That part doesn't work yet (and I'll want a way to turn that off/on per instrument) but that was the idea there. Of note you can use the same envelope for PSG volume, width (PWM) or pitch.
There's more work to do, such as being able to scroll the envelopes. Envelopes are 256 bytes in length at present (I pondered decreasing the max length in order to have more than 32 envelopes but that would complicate envelope lookups). I need to get the high bits working as noted above. And I originally intended upon envelopes being loopable (so loop until NOTEOFF or NOTEREL). Doing that allows for ADSR-like envelopes.
Anyways enough banter, onto a demo!
Re: DreamTracker Dev Log
Posted: Sun Feb 04, 2024 4:23 pm
by m00dawg
Wasn't feeling great from my covid booster so instead of working on features, I put my musician hat on and wrote a questionable cover of Corona's Rhythm of the Night. Enjoy?
Improved ISR handling for better performance (DT can even run at 1MHz in the emulator and 2MHz on real hardware!)
Bugfix for some FM values
Global transpose (including a pattern effect)
65816 compatibility
Pitch slides now work similarly between PSG and FM
Quit (Reboot)
Some misc bugfixes I neglected to document well Lots of polish as the march towards beta continues. Check it out on dreamtracker.org!
Re: DreamTracker Dev Log
Posted: Sun Feb 18, 2024 6:35 pm
by m00dawg
Big changes incoming! I've been working out how to best handle managing shared and unique effects across the available sound options, both now and hopefully in the future. I've come up with this:
TLDR is I've organized things into 4 separate 64 value chunks:
Shared Effects Range: $00-$3F
Unique To Instrument Effects Range: $40-7F
Global Range: $80-BF
Unallocated: $C0-FF
I might adjust this a bit, since, e.g. I don't think there needs to be 64 unique global options (there's only a handful at the moment) but I wanted to spread things out to allow for expansion.
This will cause some reordering of effect numbers which I plan on having a python script available to convert songs for folks that have been making muzak during the alpha. That will be useful, notably, for the combined slide/sweep effects which I have decided to break out from the PSG effects. This aligns them with FM but would also be useful when adding a sweep speed option (I find the sweeps are too fast right now).
Once I finalize these changes, that's one massive domino to fall for moving DreamTracker to a Beta. I wanted to be mindful of breaking changes for Alpha but didn't want to be shoehorned into not improving things if I felt the need, which is the case here. For Beta though that would be a much harder sell. I still won't guarantee that but will guarantee an upward conversation process (namely the python script, or maybe even a web service or custom X16 app separate to DreamTracker) but hope that would be very few and far between. There's room in the song options for instance for more global settings and room in pattern data to add features without breaking songs. But an effect re-org, well, that kinda breaks stuff.
Apologies if that affects folks, hoping the python script will mitigate those issues. I haven't made any changes yet but I'll have to tackle this before beta at some point.
In other DT news, though I haven't cut a built release yet, I fixed some bugs related to loading PCM samples that have been long standing.
Re: DreamTracker Dev Log
Posted: Mon Feb 19, 2024 3:49 am
by mortarm
From a user perspective, how would this Python script be handled?
Re: DreamTracker Dev Log
Posted: Mon Feb 19, 2024 3:58 am
by m00dawg
The source for it is on the gitlab in the python folder. It needs updating but doesn't use any external libraries meaning it will probably run on any modern OS. A web version would be a lightweight Python flask app which would do the same thing for folks that don't wanna mess with Python. You give your old save, it returns back an updated one. One change I want to add in the spare space available in the song details ("misc") bank is not only the song file version but also the version of Dreamtracker that created it (probably as a text version string or byte array where each digit is a number between the periods - something like that). That will allow the conversion tool to be smarter if I ever step in an incompatibility like the effects reorg, or help with debugging.
All that said, as a cautionary tale, DT is Alpha and I have let folks know to expect these sorts of things. But I'll do my best to make things reasonable there. At present, other than me, there's 1 maybe 2 folks using DT regularly that I'm aware of. Those 2 folks are just as important to me as a million but the scope of the solution to the upgrade path doesn't have to be extravagant as a result.
Re: DreamTracker Dev Log
Posted: Mon Feb 19, 2024 3:51 pm
by mortarm
Hey, Moo, when you go beta you can bump that user base to a whopping THREE!
Re: DreamTracker Dev Log
Posted: Mon Feb 19, 2024 4:48 pm
by m00dawg
Thanks Hopefully the beta gets a few more folks interested. Been slowly squashing bugs to get there.