Titanics Player

Discussion about Amiga / C64 / Demoscene music and the ExoticA music archive. Favourite music, new rips, musicians, demo sounds, audio software. It's all welcome here.

Moderators: XtC, BuZz

asle
Posts: 208
Joined: Fri Mar 07, 2003 11:28 pm
Location: France
Contact:

Titanics Player

Post 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
Sylvain "Asle" Chipaux

cf
Posts: 63
Joined: Sun Sep 28, 2003 6:24 pm

Post by cf »

the replay routine seems to be a MasterSoundTracker modified

asle
Posts: 208
Joined: Fri Mar 07, 2003 11:28 pm
Location: France
Contact:

Post 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
Sylvain "Asle" Chipaux

cf
Posts: 63
Joined: Sun Sep 28, 2003 6:24 pm

Post 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

asle
Posts: 208
Joined: Fri Mar 07, 2003 11:28 pm
Location: France
Contact:

Post 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 ;) !.
Sylvain "Asle" Chipaux

cf
Posts: 63
Joined: Sun Sep 28, 2003 6:24 pm

Post 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

asle
Posts: 208
Joined: Fri Mar 07, 2003 11:28 pm
Location: France
Contact:

Post 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
Sylvain "Asle" Chipaux

cf
Posts: 63
Joined: Sun Sep 28, 2003 6:24 pm

Post 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.

asle
Posts: 208
Joined: Fri Mar 07, 2003 11:28 pm
Location: France
Contact:

Post 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.
Sylvain "Asle" Chipaux

cf
Posts: 63
Joined: Sun Sep 28, 2003 6:24 pm

Post by cf »

great!

User avatar
Crown
Posts: 19
Joined: Wed Oct 09, 2002 3:36 pm

Post 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

cf
Posts: 63
Joined: Sun Sep 28, 2003 6:24 pm

Post 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 :lol:

(oye, my english is not very good, too many deficiencies during the school time...already lame :shock: )

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! :P

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.

User avatar
Crown
Posts: 19
Joined: Wed Oct 09, 2002 3:36 pm

Post 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!!!

cf
Posts: 63
Joined: Sun Sep 28, 2003 6:24 pm

Post 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 :) : Image
Do you remember some musicians you have been in contact with?
no sorry, none of the well-known musicians :cry:
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.

User avatar
Crown
Posts: 19
Joined: Wed Oct 09, 2002 3:36 pm

Post by Crown »

OKi doki.

I'll let you know if I find him. :)

have a good day!

cheerio

Post Reply