Jump to content
  • entries
    334
  • comments
    900
  • views
    258,393

VCS music tracker!


Guest

473 views

Ta-da! This is something I've been wanting to do for a long while - a VCS music tracker format. Forgive the tacky Fuji logo, it's the first VCS program I did years ago. I re-used it so I didn't have to spend too much time putting together something which would generate a stable screen.Format details:Two layer list format: top layer is a a song which is a list of 16 bit pointers to seqences (note lists); bottom layer are sequences which are a list of 1-n byte lengths, volume, notes and escape codes.

Song (words):<$8000	$8000 OR word is pointer to next song entry>$7FFF	word is pointer to next sequenceSequence (byte codes):byte #	byte0	$00	end of sequence0	$nn  note length in frames, followed by additional codes1	$00	rest (AUDVn=0) for note length, volume restored1	$0v	volume control, followed by additional codes1	$1x	escape code, TDB, may be followed by additional codes1+	%cccfffff	note codenote code:ccc	fffff	AUDC	AUDF001	0-31	1	fffff	saw010	0-7	2	fffff010	8-31	12/13	fffff	square (low)011	0-7	3	fffff	engine011	8-31	14	fffff	bass (low)100	0-7	8	fffff	noise100	8-31	15	fffff	pitfall (low)101	0-31	4/5	fffff	square (high)110	0-31	6/10	fffff	bass (high)111	0-31	7/9	fffff	pitfall (high)

This covers off all the audible capabilities of the TIA.Depending on the game, songs may be either one channel (with the second channel used for SFX) or two voices. Two channel songs are stored multiplexed with the next note in the sequence being used whenever the note length counter reaches zero. De-multiplexed two channel songs could be handled, but would probably be coded similar to two independent one channel songs. SFX and two channel songs are possible, perhaps via some kind of break-in note/sequence handler. Hmmm...I'm actually impressed that "The Entertainer" came out so well. Only two sour notes. (Well, one out of tune, and one out of tone.)

4 Comments


Recommended Comments

Three comments:

One: This seems really cool!

Two: I don't understand this:

Song (words):
<$8000 $8000 OR word is pointer to next song entry
>$7FFF word is pointer to next sequence

Three: Is there supposed to be a binary attached to this or am I missing something important?

Link to comment
Three comments:

One: This seems really cool!

Two: I don't understand this:

Song (words):
<$8000 $8000 OR word is pointer to next song entry
>$7FFF word is pointer to next sequence

Three: Is there supposed to be a binary attached to this or am I missing something important?

Three - whoops, I've added the attachment.

 

Two - a song is a list of pointers to sequences, but for flexibility it can also contain a pointer to a song. If the MSB of the pointer is set, then it's a sequence pointer. If the MSB is clear, then the MSB is set and used as a pointer to the next song.

 

See the sample code.

Link to comment
Three comments:

One: This seems really cool!

Two: I don't understand this:

Song (words):
<$8000 $8000 OR word is pointer to next song entry
>$7FFF word is pointer to next sequence

Three: Is there supposed to be a binary attached to this or am I missing something important?

Three - whoops, I've added the attachment.

 

Two - a song is a list of pointers to sequences, but for flexibility it can also contain a pointer to a song. If the MSB of the pointer is set, then it's a sequence pointer. If the MSB is clear, then the MSB is set and used as a pointer to the next song.

 

See the sample code.

Thanks for the explanation - by MSB you mean most significant *bit*, right? I was thinking "byte" and it wasn't making any sense to me.

 

In any case, it sounds *pretty* good. :)

 

The tracker is very cool. Am I reading the code right; it uses 8 bytes of RAM for the single channel?

Link to comment
Thanks for the explanation - by MSB you mean most significant *bit*, right?  I was thinking "byte" and it wasn't making any sense to me.

 

The tracker is very cool.  Am I reading the code right; it uses 8 bytes of RAM for the single channel?

MSB is bit (in this case), maybe I should use msb :-)

 

8 bytes for 2 multiplexed channels. I only use 1 channel in my demo, but if I wanted to have a bass line, I'd just use the following code:

 

ldx #0

dec notedel,x

bne 1$

jsr nextnote

1$ inx

dec notedel,x

bne WAITIM

jsr nextnote

Link to comment
Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...