Page 1 of 4

YMDj - A Native Sega Genesis/Megadrive Music Tracker.

Posted: Sat Sep 27, 2014 9:23 pm
by Count SymphoniC
Updated: 10/22/2014

Above is a link to a quick video I did showcasing the progress of YMDj. Playback Engine is working, FM channels 1-6 work well and playback. I even wrote a quick song for you guys. Still no DAC or PSG playback support yet. Lots of work to do.

I'd like to take a second to thank Chipmusic forum member Monkeymook aka Daria for the willingness to donate an NTSC Genesis model 2 for this project. It's even coming with an NSTC/PAL switch and other mods! I'm definitely excited about this! Thank you friend.

YMDj - A Native Sega Genesis/Megadrive Music Tracker
YMDj, is a music sequencer/tracker programmed in 68k assembly and is in development for the Sega Genesis/Megadrive.

Currently: v0.14
Implemented Synth Editor.
Implemented Playback Engine.
Implemented FM channels 2-6.
Fixed many bugs and crashing issues.

PSG tone playback
PSG noise mode playback
PSG isntrument editing and software envelopes.
Navigation improvements
Gamepad button delay/speed improvements
Button combo handling improvements
Fix crash that sometimes happens on really low FM notes.
Fix PSG note table routines
Options menu
Palette Editing
Tempo Control
Interface improvements (On/Off for synth 0 or 1 settings) (Off Left Right Both for panning settings FM)
Remembering cursor position on Song screen
Fixing playback timing to YM2612 timers instead of vertical_counter
Tracker Commands
DAC support
Ch 3/6 special mode
Groove support
SRAM support Saving/Loading
Live mode
Look into CSM mode synthesis

Very old demo, v 0.07 can be downloaded here:

Use the dpad to navigate the cursor, button C to edit, button A + dpad to navigate different screens. Only sound channels FM1, PSG1-4 produce sound in this demo.

This is NTSC only for now. When the tracker matures, support for PAL will be added.

EDIT: Jazzmarazz has confirmed this working well on a Sega Genesis model 3. Thank you for testing!
EDIT EDIT: Corthax has confirmed this working on a Nomad. Red + Blue is difficult to read. Time for a color change. Thanks Corthax.

I'm now accepting donations via Paypal. Donations toward this project will be used to fund
development. This means that your donations will go towards the costs of the hardware required for testing, cart runs, and keeping this project alive. Additionally if you donate, your name will be mentioned in the "Special Thanks" in the "About" section of the tracker when the Options Menu is implemented, please make sure I get your name! ... aNonHosted

Posted: Sun Sep 28, 2014 3:51 am
by Count SymphoniC
I made some minor layout changes to the Pattern Editor. In addition, the rest of the pattern tables and cursor x movement is implemented now. Working on hardware horizontal scrolling so the PSG channels can also be displayed. It looks like the pattern editor is almost complete. The time to work on the Chain and Note entry screens is coming. Once Note Entry is done, we'll begin sound tests and see if we can't turn this into a primitive music maker. Then the next demo will be released. I think I can pull that off in 3-4 weeks at this pace, maybe less.

After that, I plan on working on the options, intrument, and other miscellaneous menus as I get a better feel for what this tracker needs.

Posted: Sun Sep 28, 2014 8:24 am
by Count SymphoniC
YMDJ v 0.02

I lied. Only because the last demo was so lackluster. Now the pattern editor is complete, with the exception of future enhancements and code optimizations. But this is it. As you can see, YMDJ is still in a very early testing phase. The cursor can move x and y, all rows can be scrolled to and edited. The basic cursor navigation system is complete. It might not seem like much, but that's actually alot of code, especially because it's in assembly.

Chain and note entry screens are next. And might be done quicker than expected. I still need someone to test this on real hardware... be aware that this is NTSC only, I will add PAL support when this project gets a little further along.

Posted: Sun Sep 28, 2014 9:36 am
by Count SymphoniC

Posted: Sun Sep 28, 2014 6:33 pm
by Jazzmarazz
Nice work. I'll slap it on a cart and upload a pic of it on real hardware for you. There should be no differences since it doesn't really do anything yet. :P

Posted: Sun Sep 28, 2014 8:45 pm
by Count SymphoniC
Jazzmarazz wrote:Nice work. I'll slap it on a cart and upload a pic of it on real hardware for you. There should be no differences since it doesn't really do anything yet. :P
Hello again. There could be some hardware unfriendly code in there and if there is, it'd be really nice to know before I get really deep into this project.

So far I've spent the day reorganizing code, cleaning up, and I've started on the Chain Entry screen. Things are progressing at a very nice pace. The Chain Entry screen should be finished in a couple of days as long as I don't run into any snags. I'm looking forward to the pics.

Posted: Mon Sep 29, 2014 10:19 pm
by Jazzmarazz
I just tried v002 on my Sega Genesis 3 and the TMSS shows up, flashes once and then stays on that screen. The tracker never shows up.

I will try the previous version of your ROM and let you know if that works...

EDIT: No, the first version does not run properly either.

To be more descriptive, the TMSS shows up on screen and while it is on screen, I may reset the console how ever many times I care to. Resetting the console makes the TMSS flash. If I do not reset the console, the TMSS will flash once after a few seconds and simply hang on the TMSS. If I allow for it to do that, I cannot reset the console at all. I have to disconnect power altogether.

It seems like the console simply hangs after the TMSS. I don't know much about 68k ASM, but in GBz80 ASM there is a bug in which the console will hang if you place two HALT op codes one after the other. The bug occurs because the op code after a HALT op code is repeated twice, resulting in an endless loop. This bug is not present in emulators.

Maybe you did something similar in a wait function or something.

Good luck.

Posted: Tue Sep 30, 2014 12:03 am
by Count SymphoniC
Hey, thanks for testing. Since I've posted v002 I found a couple of problems with the startup code and fixed them, though there is probably more... in fact one of them probably has to do with the ROM name, I'll have to double check everything. It's probably an easy fix if I can figure out what caused this, I'm sure that the security check is fine. I'm using Regen and Gens kmod emulators as I don't yet have access to real hardware. I've heard of an emulator called Exodus that is said to be pretty accurate, but it's only for x64 pc's, and I don't have one anymore.

In other news I'm nearly done with the Chain editor, although I've just ran into a programming snag that I'll have to figure out before I can proceed any further. Anyways, once the Chain editor is complete, then I'll work on the Note editor and start sound tests. I will upload the next demo then. In the mean time, I've got some kinks to work out.

Posted: Tue Sep 30, 2014 12:09 am
by Jazzmarazz
I'll test anything you throw out there. I don't have an everdrive, but my flash ROMs work just the same. Cheers

Posted: Tue Sep 30, 2014 5:15 am
by Count SymphoniC
Jazzmarazz wrote:I'll test anything you throw out there. I don't have an everdrive, but my flash ROMs work just the same. Cheers
Flash ROMs... so basically every failed test is a wasted cart/chip? They're not rewritable are they?

Well anyways, the chain screen is done. All the data arrays for the Song screen and Chain editor are all linked together nicely, a value of 3F on the song screen will take you to chain 3F, where you can edit it's own data table safely without wrecking anything. This assembly can be tough work when you're still new to it! But still, it's surprisingly easy compared to what I expected. Everything is consistent so far. Also, you can now switch between screens using A+ Left/Right. Cursor movement in the song screen beyond the FM6 column will scroll to show the PSG columns, and vice versa, scrolling works well. Anything else I'd want to add to these two screens would be purely aesthetic so I'll save that, as well as the more advanced editting button combinations, for later.

Starting tomorrow, work on the Note entry screen begins, and hopefully we can start sound tests soon. I also need to investigate the startup code and find what's causing the freeze. I think I know what it is, but perhaps we'll have a working demo with sound sooner than expected.

Posted: Tue Sep 30, 2014 9:46 am
by freezedream
No, flash ROMs are erasable and rewritable. :)

Nice work by the way! I'll have to check this out soon.

Posted: Tue Sep 30, 2014 4:01 pm
by Count SymphoniC
I guess I'm just used to ROM meaning Read Only Memory.

Posted: Tue Sep 30, 2014 5:56 pm
by Jazzmarazz
I suppose I also should have said "EEPROM" anyhow. Also, do you think you fixed the hardware bug in v004? Keep up the good work!

Posted: Tue Sep 30, 2014 7:40 pm
by Count SymphoniC
Jazzmarazz wrote:I suppose I also should have said "EEPROM" anyhow. Also, do you think you fixed the hardware bug in v004? Keep up the good work!
Maybe, maybe not. If I remember right, the first VDP register was set to #0x20, when it should have been set to #0x14 (horizontal interrupts and palette select was disabled and an unused bit was turned on), also autoincrement was set to 0, although later on in the code it was set to 2.

There's probably some issues with the ROM header and I'm going to double check that I'm properly satisfying the requirements of the TMSS. I've been racking my brains trying to think of what else the problem could be, and there are lots of possibilities. I'm going to have a look at start up code that is known to work and check it against what I have and see if I can't figure that one out. It's good for a better understanding of the hardware I'm working with anyways. Anyways, I'll work on it real quick and send an early demo to you for checking when I'm done, then continue finishing up v005.

Posted: Thu Oct 02, 2014 4:21 am
by Jazzmarazz
Posting in the main thread again because I have a comment.

There needs to be some sort of timer to count how long a direction button is pressed and act accordingly. Currently the cursor will slide across the screen at a fast pace even if you tap the button for very little time. This makes it hard to move the cursor only by one. Get what I mean?