Titanics Player
Titanics Player
Hi all,
Does anyone tried to convert back the musics found in several Titanics prods in 1989 ?. Like Titantrax or Sesamestreet Cracking Team or even the A500 demo by Starbug. The format seem simple enough but I'm having difficulties handling the pattern data. Rather confusing. So, does anyone tried something with this STK converted files ?.
Would save me a couple of hours .
Cya
Sylvain
PS : demos featuring this format so far :
Starbug A500 demo
Sesamestreet Cracking Team
Titan Trax
Does anyone tried to convert back the musics found in several Titanics prods in 1989 ?. Like Titantrax or Sesamestreet Cracking Team or even the A500 demo by Starbug. The format seem simple enough but I'm having difficulties handling the pattern data. Rather confusing. So, does anyone tried something with this STK converted files ?.
Would save me a couple of hours .
Cya
Sylvain
PS : demos featuring this format so far :
Starbug A500 demo
Sesamestreet Cracking Team
Titan Trax
Sylvain "Asle" Chipaux
Thanks for this feedback !.
Now, if it helps, here's what I know of this format :
- 15 samples stored on 12 bytes each
->smp addy (dword)
->smp size/2 (word)
->fine ? (byte)
->vol (byte)
->loopstart/2 (word)
->loopsize/2 (word)
- pattern list which is a lot of words being addys of patterns. It ends with 0xFFFF
- pattern data. That's where I've got pbs . Seems each value is one dword (well, four bytes). The patterns seem to end if value[0]&0x80 == 0x80. the last 12 bits are the FX+FXVal like STK. Note that C is set volume and its value can be up to 0x64 !. Remains to identify the notes and sample number AND the empty notes !. The size of each pattern is not fixed, so there's a way to bypass or repeat a given note. I've not decyphered also the way of storage. I mean, if it is Note 1 from voice1 then note 1 from voice2, etc. (like STK) or if it's another way like per voice.
- the sample data as is. I suggest to use the address given in the header but beware as it can be refering to memory addies. So, addy of smp[n] -= addy of smp[0]. Knowing that addy of smp[0] is right after the last stored pattern ... well, we can hope .
Hope it helps.
Sylvain
Now, if it helps, here's what I know of this format :
- 15 samples stored on 12 bytes each
->smp addy (dword)
->smp size/2 (word)
->fine ? (byte)
->vol (byte)
->loopstart/2 (word)
->loopsize/2 (word)
- pattern list which is a lot of words being addys of patterns. It ends with 0xFFFF
- pattern data. That's where I've got pbs . Seems each value is one dword (well, four bytes). The patterns seem to end if value[0]&0x80 == 0x80. the last 12 bits are the FX+FXVal like STK. Note that C is set volume and its value can be up to 0x64 !. Remains to identify the notes and sample number AND the empty notes !. The size of each pattern is not fixed, so there's a way to bypass or repeat a given note. I've not decyphered also the way of storage. I mean, if it is Note 1 from voice1 then note 1 from voice2, etc. (like STK) or if it's another way like per voice.
- the sample data as is. I suggest to use the address given in the header but beware as it can be refering to memory addies. So, addy of smp[n] -= addy of smp[0]. Knowing that addy of smp[0] is right after the last stored pattern ... well, we can hope .
Hope it helps.
Sylvain
Sylvain "Asle" Chipaux
len max of pattern is 128
this player use second byte of FX/FXVal to set the current channel
this player use second byte of FX/FXVal to set the current channel
Code: Select all
// in chanelhandler :
move.b patterndata+1,d0
lsr.b #6,d0
move.w d0,d4
lsl.w #3,d0
lea pointers,a3 ; dc.l datach0,$dff0a0, ...
movea.l (a3,d0.w),a6
movea.l 4(a3,d0.w),a5 ; $dff0a0
woaw ! .. didn't think of that !. so, to explain better :
Works fine . Now, what of this '?!?'. I tried setting an empty 'n' lines but it lead to too many lines in the pattern which I believe is still limited to 64 notes. I've also tried to suplicate the current note data alone, meaning the same as setting empty lines and leads to the same conclusion. So, remains several possibilities like repeating the current note but not alone, or putting empty notes but not alone too. I mean by alone, that I should continue to read the other data for the current line.
Oh and I tried to ignore it altogether but it leads to far too few notes in certain cases with the example files I have extracted manually.
I'll continue a few tests, but I wanted to show I've read your reply and it helped more than quit a bit !.
Code: Select all
?!? note ref Fx
/\ / \ /\
| | | | | |
0000-0000 0000-0000 0000-0000 0000-0000
| || \ | | |
| \ | \ /
| voice number | Fx Val
ends pattern if set smp nbr
Oh and I tried to ignore it altogether but it leads to far too few notes in certain cases with the example files I have extracted manually.
I'll continue a few tests, but I wanted to show I've read your reply and it helped more than quit a bit !.
Sylvain "Asle" Chipaux
about '?!?' :
yep, It seems to be a counter for the 64 notes/pattern (even if more than 64), stored in first byte of 'patdata', value from 63 to 0. if <0 go to next pattern, else next note.
this is the code part (just after the channel setting) :
yep, It seems to be a counter for the 64 notes/pattern (even if more than 64), stored in first byte of 'patdata', value from 63 to 0. if <0 go to next pattern, else next note.
this is the code part (just after the channel setting) :
Code: Select all
move.l patdata,d0
and.l #$3FFFFF,d0 ; skip first 6 bits (end bit)
move.l d0,(a6) ; datach0x
moveq #0,d2
move.b patdata,d0 ; first byte = endbit+note counter <-------------
bpl.s _nexttrack ; not yet the end of pattern
moveq #1,d2
move.b 2(a6),d0
and.w #%00001111,d0 ; keep 'note ref'
cmpi.w #$B,d0 ; skip pattern (position jump)
beq.s _nextpattern
move.b counter64,d2
_nextpattern:
clr.w trkpos
addq.w #2,patpos ; next pattern (.w)
move.b #64,counter64 ; reset note counter <---------
bra.s _getnew
_nexttrack:
addq.w #4,trkpos ; next note/track (.L)
_getnew:
movea.l ptMod,a0 ; module address
lea $B4(a0),a1 ; pattern offsets
move.w patpos,d0
moveq #0,d1
move.w (a1,d0.w),d1
cmpi.w #-1,d1 ; no more pattern ?
bne.s _continue
st loopflag
clr.w patpos
bra.s _getnew
_continue:
movea.l d1,a2 ; current pattern offset
adda.l a0,a2 ; +ptmod = current pattern address
adda.w trkpos,a2 ; +trkpos = current note
move.l (a2),patdata ; FX+FXVAL
add.b d2,patdata ; first byte+note counter <------------
move.b (a2),d0 ; initial first byte
and.b #%01111111,d0 ; skip end bit
sub.b d0,counter64 ; decr note counter
I can try to explain better
the '?!?' value is used to decrement the note counter but also to skip "empty note" (if no note in channel x), because this format doesn't use the standard note1voice1-note1voice2-note1voice3-note1voice4 for each track in the pattern.
How the player can know when change track, or if 1, 2, 3 or 4 notes at the same time on each channel.
example of pattern:
1st track : 1 note on each channel (endbit-?!? voice-note)
0-0 0-7 : !?!=0, 0=voice1
0-0 4-3 : !?!=0, 4=voice2 - note counter not decremented, note at the same time
0-0 9-3 : !?!=0, 9=voice3 - idem
0-0 d-9 : !?!=0, d=voice4 - idem
0-1 0-3 : !?!=1, 0=voice1 - note counter decr. no note on voice 2,3,4. go to next track
0-1 0-7 : idem. go to next track
0-0 9-3 : !?!=0, 9=voice3 - new note.
0-1 0-3 : no more note, go to next track
in the first pattern, I counted 64 tracks terminated by 0-1 in the first pattern before the 0x80 end value, idem in the second pattern...
sometimes, the decr. value is >1 and in this case the number of tracks is <64 (skip track, jump?)
What is the standard note-ref/fx/fxval ? are the same here? how is a standard "empty note"?
a converter can be possible without many difficulties with that.
the '?!?' value is used to decrement the note counter but also to skip "empty note" (if no note in channel x), because this format doesn't use the standard note1voice1-note1voice2-note1voice3-note1voice4 for each track in the pattern.
How the player can know when change track, or if 1, 2, 3 or 4 notes at the same time on each channel.
example of pattern:
1st track : 1 note on each channel (endbit-?!? voice-note)
0-0 0-7 : !?!=0, 0=voice1
0-0 4-3 : !?!=0, 4=voice2 - note counter not decremented, note at the same time
0-0 9-3 : !?!=0, 9=voice3 - idem
0-0 d-9 : !?!=0, d=voice4 - idem
0-1 0-3 : !?!=1, 0=voice1 - note counter decr. no note on voice 2,3,4. go to next track
0-1 0-7 : idem. go to next track
0-0 9-3 : !?!=0, 9=voice3 - new note.
0-1 0-3 : no more note, go to next track
in the first pattern, I counted 64 tracks terminated by 0-1 in the first pattern before the 0x80 end value, idem in the second pattern...
sometimes, the decr. value is >1 and in this case the number of tracks is <64 (skip track, jump?)
What is the standard note-ref/fx/fxval ? are the same here? how is a standard "empty note"?
a converter can be possible without many difficulties with that.
ahaha .. you're fantastic !. Ok, I've done it. Converted the patterndata cleanly and it works !. Yeah !. I've written a full converter now and it's just great . I'll put some links of the results later on today.
So thank you very much for your kind help and you patience.
Kind regards.
Sylvain
Edit:
Ok, here are the musics from the Sesamestreet Cracking Team demo. I've stored the lot here.
So thank you very much for your kind help and you patience.
Kind regards.
Sylvain
Edit:
Ok, here are the musics from the Sesamestreet Cracking Team demo. I've stored the lot here.
Sylvain "Asle" Chipaux
Hi crown (I remember I send you a cd with all the mods from my site )Crown wrote:A question crossed my mind. Have you ever been in the demoscene?
cheers
hmm...in the demoscene...err...a little bit...but in the shadow, in the other side of the demoscene, not the darkside, no... more in the..."lamest" side
(oye, my english is not very good, too many deficiencies during the school time...already lame )
the main problem was that I was alone or almost...some friends made stuffs especially graphics or musics, but no code at this time...the funniest is that they are now coders in big french companies ... except me!
I've done some...stuffs, 12/15 years ago (see here and there, it misses some)
I had written to "Dream" french mag (Vodka/Saturn answered me - I always have his letter) for the french groups list of the demoscene, and in the issue #18 of march 1995, to my great surprise there was my logo in the demos pages! (thanks you Vodka. R.I.P )
I tried to restart coding some years ago : rip and convert devils/colors and Project Megaran/Reality modules, some whdload patchs (not very good at all), a startup code and some "tutos" for ADA and many cracktros resourced (flamed by Rob and A1, thanx you bstrds).
but no more "great" things
Last edited by cf on Fri Aug 03, 2007 9:18 am, edited 1 time in total.
yep, but I'm near Lyon, and I don't/can't travel too much.Crown wrote: Would be nice to have a beer with you and asle. are you visiting paris?
so, a virtual beer :
no sorry, none of the well-known musiciansDo you remember some musicians you have been in contact with?
only 2 of my friends already listed on AMP : Doc Frog and Scat
(even if Doc Frog seems to have...vanished...)
Last edited by cf on Wed Oct 24, 2007 6:41 pm, edited 2 times in total.