Page 1 of 2
Titanics Player
Posted: Wed Dec 06, 2006 12:31 pm
by asle
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
Posted: Thu Dec 07, 2006 12:33 pm
by cf
the replay routine seems to be a MasterSoundTracker modified
Posted: Thu Dec 07, 2006 2:06 pm
by asle
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
Posted: Thu Dec 07, 2006 3:43 pm
by cf
len max of pattern is 128
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
Posted: Thu Dec 07, 2006 7:13 pm
by asle
woaw ! .. didn't think of that !. so, to explain better :
Code: Select all
?!? note ref Fx
/\ / \ /\
| | | | | |
0000-0000 0000-0000 0000-0000 0000-0000
| || \ | | |
| \ | \ /
| voice number | Fx Val
ends pattern if set smp nbr
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

!.
Posted: Thu Dec 07, 2006 10:58 pm
by cf
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) :
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
Posted: Fri Dec 08, 2006 8:43 pm
by asle
Yop,
Ok, I'm sorry to say I still don't get it, unfortunatly. I'm not fluent in 68k

. Anyway, I'm expecting help tomorrow.
Thank you very much for your help so far !.
Sylvain
Posted: Sat Dec 09, 2006 10:37 am
by cf
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.
Posted: Sat Dec 09, 2006 5:02 pm
by asle
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.
Posted: Sat Dec 09, 2006 10:31 pm
by cf
great!
Posted: Sun Dec 10, 2006 9:07 am
by Crown
Hello CF,
Asle told me about your achievement. Well done.
A question crossed my mind. Have you ever been in the demoscene?
cheers
Posted: Sun Dec 10, 2006 11:03 am
by cf
Crown wrote:A question crossed my mind. Have you ever been in the demoscene?
cheers
Hi crown (I remember I send you a cd with all the mods from my site

)
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
Posted: Sun Dec 10, 2006 11:10 am
by Crown
Boy... sure I remember. So you're french.
Would be nice to have a beer with you and asle. are you visiting paris?
Do you remember some musicians you have been in contact with?
Btw it is with your help that I got in touch with Syrion. A real nice chap!!!
Posted: Sun Dec 10, 2006 1:09 pm
by cf
Crown wrote:
Would be nice to have a beer with you and asle. are you visiting paris?
yep, but I'm near Lyon, and I don't/can't travel too much.
so, a virtual beer

:
Do you remember some musicians you have been in contact with?
no sorry, none of the well-known musicians
only 2 of my friends already listed on AMP :
Doc Frog and
Scat
(even if Doc Frog seems to have...vanished...)
Posted: Mon Dec 11, 2006 9:37 am
by Crown
OKi doki.
I'll let you know if I find him.
have a good day!
cheerio