Whats the file format of delitracker CUSTOM?

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

Post Reply
destop
Posts: 6
Joined: Sat May 24, 2003 7:22 am

Whats the file format of delitracker CUSTOM?

Post by destop »

Is there documentation for the Custom format where
the replay code is embedded?

Just from looking at the disaasembly and hex dump of the file it reminds me of a SID tune with a load address and some load rutines to initialize the tune.

But from the ones ive looked at the numbers dont make sense as far as where the replay code and music data is to be loaded

kyz
Posts: 126
Joined: Thu Nov 14, 2002 1:58 am
Location: Edinburgh, Scotland
Contact:

Re: Whats the file format of delitracker CUSTOM?

Post by kyz »

destop wrote:Is there documentation for the Custom format where
the replay code is embedded?

Just from looking at the disaasembly and hex dump of the file it reminds me of a SID tune with a load address and some load rutines to initialize the tune.

But from the ones ive looked at the numbers dont make sense as far as where the replay code and music data is to be loaded
Download the DeliTracker distribution and you'll find a file called Developer.eng. If you're not actually installing DeliTracker on an Amiga, this file is in the install archive Files/developer.lha

What it basically tells you is that a Custom tune is a normal DeliPlayer, but with the DTP_CustomPlayer tag so no "check" routine is used.

The format of a DeliPlayer / custom tune is as follows:

- normal AmigaDOS executable file format. This can include multiple hunks and relocs, and flags indicating CHIP or FAST memory requirements. The AmigaDOS executable format makes it possible to load the player/custom anywhere in memory.
- the "header" in this executable is:
moveq #-1,d0
rts
dc.b "DELIRIUM"
dc.l playertags (that's a pointer to the taglist, using an absolute address, so in the executable file format that becomes a reloc)

Now, the taglist is a standard way of Amiga programming. You have a array of {tag, data} pairs, where the tag and data are always 4 bytes long. Therefore instead of having a strictly ordered parameter list, you can have them in any order. The tags themselves are just an enumeration. There are also special tags, TAG_DONE (ends the taglist), TAG_SKIP (skip this tag and data, often used in C as {(feature_enabled) ? XYZ_Feature : TAG_SKIP, featuredata} and TAG_MORE (stop processing this tag list the data part of this is a pointer to the continuation of the taglist somewhere else in memory). TAG_USER is just 0x80000000 and is expected to be the basis of all other "normal" tags. For example, delitrackers tags start at TAG_USER+"DT", i.e. 0x80004454

I recommend looking at the assembler source code of custom tunes (and players) that Don Adan has posted on the Wanted Team site. You also should look at the include file misc/DeliPlayer.i which is included in the DeliTracker distribution.

destop
Posts: 6
Joined: Sat May 24, 2003 7:22 am

Post by destop »

Thanks for the info and the links:)

shd
Posts: 99
Joined: Thu Jan 16, 2003 12:52 pm
Location: Tampere, Finland
Contact:

Re: Whats the file format of delitracker CUSTOM?

Post by shd »

destop wrote:Is there documentation for the Custom format where
the replay code is embedded?

Just from looking at the disaasembly and hex dump of the file it reminds me of a SID tune with a load address and some load rutines to initialize the tune.

But from the ones ive looked at the numbers dont make sense as far as where the replay code and music data is to be loaded
There's no good documentation for customs. You may look at uade custom loader source to see how it is done ( http://ee.tut.fi/~heikki/uade : amigasrc/score/score*.s ). There is all kinds of broken behaviour in many custom songs, and details of the 'official' format are unclear and sometimes even secret.

If SID tunes are like that, custom format is totally different.

What are you trying to achieve? Perhaps I can help you if you have well specified questions..

Few tags you should be aware of:

DTP_InitPlayer - called once per song (should allocate audio channels)
DTP_InitSound - called once per subsong (should initialize a subsong)
DTP_Interrupt - called once per time frame (should play one time frame)
DTP_StartInterrupt - called once per song (should setup interrupts properly (*sigh*))
DTP_NoteStruct - this means 'secrets'

If you run into totally broken looking custom songs, you are probably right;)

shd / uade team
http://ee.tut.fi/~heikki/uade.html

kyz
Posts: 126
Joined: Thu Nov 14, 2002 1:58 am
Location: Edinburgh, Scotland
Contact:

Re: Whats the file format of delitracker CUSTOM?

Post by kyz »

shd wrote:There is all kinds of broken behaviour in many custom songs,
There have also been bad rips in the HVSC for years. Good programmers slowly fix these one by one to make SID replay more convenient and stable. Such is life.
shd wrote:and details of the 'official' format are unclear and sometimes even secret.
It's not so much that anything in DeliTracker is secret, it's that they didn't bother finishing DeliTracker, stabilising the API and writing good documentation for anyone to use. Instead, they prefered to write everything themselves. When you use open source software, day in and day out, you lose sight of the fact that some freeware authors won't trust you with anything more useful than their executables.

The way that NotePlayers operate, from a replayer perspective, can be read in the source code of Jon Pickard's TFMX DeliPlayer.

(In case anybody is wondering, the NotePlayer interface is DeliTracker's system for playing notes independent of the Amiga audio hardware. EaglePlayer has a similar system called Amplifiers.)

shd
Posts: 99
Joined: Thu Jan 16, 2003 12:52 pm
Location: Tampere, Finland
Contact:

Re: Whats the file format of delitracker CUSTOM?

Post by shd »

kyz wrote: It's not so much that anything in DeliTracker is secret, it's that they didn't bother finishing DeliTracker, stabilising the API and writing good documentation for anyone to use. Instead, they prefered to write everything themselves. When you use open source software, day in and day out, you lose sight of the fact that some freeware authors won't trust you with anything more useful than their executables.
And some of those freeware authors consider it a crime to disassemble their players to achieve compability with other systems. (for example disassemble a noteplayer) And no, open source people have not lost sight, the others have never had it.
kyz wrote: The way that NotePlayers operate, from a replayer perspective, can be read in the source code of Jon Pickard's TFMX DeliPlayer.
URL? Couldn't find it.

shd / uade team

kyz
Posts: 126
Joined: Thu Nov 14, 2002 1:58 am
Location: Edinburgh, Scotland
Contact:

Re: Whats the file format of delitracker CUSTOM?

Post by kyz »

shd wrote:And some of those freeware authors consider it a crime to disassemble their players to achieve compability with other systems. (for example disassemble a noteplayer) And no, open source people have not lost sight, the others have never had it.
They can consider all they want, reverse engineering for compatibility is legal. But some authors are really quite protective of their source code, you need a slightly more diplomatic attitude if you want a line of source from them.
shd wrote:URL? Couldn't find it.
Hmm. It used to be in TFMX_v1.6.7 editor on ExoticA. It came both with Jon's TFMX source and the deliplayer6.i file. Now I can only find the source alone, at http://exotica.fix.no/source/replays/De ... MX_note2.s

Good job I have the deliplayer6.i file in my includes :)

Code: Select all

--- DeliPlayer.i        1995-06-03 10:58:32.000000000 +0100
+++ DeliPlayer6.i       2003-05-30 01:22:42.000000000 +0100
@@ -126,6 +126,15 @@
 
        EITEM   DTP_InitNote                    ; NoteStruct initialization
 
+       EITEM   DTP_NoteAllocMem        * allocates memory for module
+       EITEM   DTP_NoteFreeMem         * frees module-memory
+       EITEM   DTP_PlayerInfo          * a pointer where DT stores a pointer
+                                       * to the current Player Taglist
+       EITEM   DTP_Patterns            * FPTR to a pattern-count routine
+       EITEM   DTP_Duration            * FPTR to a duration calc routine
+       EITEM   DTP_SampleData          * FPTR to a sample-info routine
+       EITEM   DTP_MiscText            * FPTR to a misc-text routine
+
 *** end of player interface enumeration ***
 
 
@@ -238,6 +247,79 @@
        ;------ can seperate CHIP DATA form CODE (and you should do this!).
 
 
+ STRUCTURE DTN_NoteStruct,0
+       APTR    nst_Channels            ;pointer to a list of notechannels */
+       ULONG   nst_Flags               ;misc flags (see below) */
+       ULONG   nst_MaxFrequency        ;max. frequency of this player (28,867 Hz in DMA mode) */
+       UWORD   nst_MaxVolume           ;max. volume of this player (in most cases 64) */
+       STRUCT  nst_Reserved,18         ;reserved for future use (must be 0 for now) */
+       LABEL   DTN_NoteStruct_SIZEOF
+
+
+ STRUCTURE DTN_NoteChannel,0
+       APTR    nch_NextChannel         ;next channel in the list (NULL if last) */
+       ULONG   nch_NotePlayer          ;for use by the noteplayer (the deliplayer must ignore this) */
+       WORD    nch_Reserved0           ;reserved for future use (must be 0 for now) */
+       UBYTE   nch_Private             ;just what it says */
+       UBYTE   nch_Changed             ;what has changed since last call */
+       WORD    nch_StereoPos           ;set this field when the InitNote function is called */
+       WORD    nch_Stereo              ;describes "where" this channel is supposed to play */
+       APTR    nch_SampleStart         ;^sampledata */
+       ULONG   nch_SampleLength        ;size of sample */
+       APTR    nch_RepeatStart         ;^repeat part of sample */
+       ULONG   nch_RepeatLength        ;size of repeat part */
+       ULONG   nch_Frequency           ;frequency (or period) of sample */
+       UWORD   nch_Volume              ;volume of sample */
+       STRUCT  nch_Reserved1,26        ;reserved for future use (must be 0 for now) */
+       LABEL   DTN_NoteChannel_SIZEOF
+
+
+NSTB_Dummy     EQU     0       ; only a dummy-NoteStruct (no NotePlayer
+                               ; needed)
+NSTF_Dummy     EQU     1<<0
+NSTB_Period    EQU     1       ; Amiga period supplied instead of frequency
+NSTF_Period    EQU     1<<1
+NSTB_ExtPeriod         EQU     2       ; Extended period (period*4) supplied instead
+                               ; of frequency 
+NSTF_ExtPeriod EQU     1<<2
+NSTB_NTSCTiming EQU    3       ; Period/ExtPeriod supplied in NTSC instead of
+                               ; PAL 
+NSTF_NTSCTiming EQU    1<<3
+NSTB_EvenLength EQU    4       ; Samplelength supplied as WORD instead of
+                               ; LONG 
+NSTF_EvenLength EQU    1<<4
+NSTB_AllRepeats EQU    5       ; play Repeats even if no One-Shot part was
+                               ; played yet 
+NSTF_AllRepeats EQU    1<<5
+
+NSTB_Reverse   EQU     8       ; little endian byte ordering 
+NSTF_Reverse   EQU     1<<8
+NSTB_Signed    EQU     9       ; sample data is signed linear
+                               ; (2's complement) 
+NSTF_Signed    EQU     1<<9
+NSTB_Unsigned  EQU     10      ;       -"-      unsigned linear 
+NSTF_Unsigned  EQU     1<<10
+NSTB_Ulaw      EQU     11      ;       -"-      U-law (logarithmic) 
+NSTF_Ulaw      EQU     1<<11
+NSTB_Alaw      EQU     12      ;       -"-      A-law (logarithmic) 
+NSTF_Alaw      EQU     1<<12
+NSTB_Float     EQU     13      ;       -"-      IEEE floats 
+NSTF_Float     EQU     1<<13
+
+NSTB_7Bit      EQU     16      ; sample data is in 7-bit format 
+NSTF_7Bit      EQU     1<<16
+NSTB_8Bit      EQU     17      ;        -"-        bytes 
+NSTF_8Bit      EQU     1<<17
+NSTB_16Bit     EQU     18      ;        -"-        16-bit words 
+NSTF_16Bit     EQU     1<<18
+NSTB_24Bit     EQU     19      ;        -"-        24-bit data 
+NSTF_24Bit     EQU     1<<19
+NSTB_32Bit     EQU     20      ;        -"-        longwords 
+NSTF_32Bit     EQU     1<<20
+NSTB_64Bit     EQU     21      ;        -"-        quadwords 
+NSTF_64Bit     EQU     1<<21
+
+
 ;---------------------------- Global Variables ------------------------------
 
  STRUCTURE DeliTrackerGlobals,0

shd
Posts: 99
Joined: Thu Jan 16, 2003 12:52 pm
Location: Tampere, Finland
Contact:

Re: Whats the file format of delitracker CUSTOM?

Post by shd »

kyz wrote: Hmm. It used to be in TFMX_v1.6.7 editor on ExoticA. It came both with Jon's TFMX source and the deliplayer6.i file. Now I can only find the source alone, at http://exotica.fix.no/source/replays/De ... MX_note2.s

Good job I have the deliplayer6.i file in my includes :)
Thanks, this had been useful a year back when we didn't have eagleplayer Amplifier support:)
btw. Eagleplayer guys are great. They sent us parts of their amplifier source code for reference.

shd / uade team

destop
Posts: 6
Joined: Sat May 24, 2003 7:22 am

Re: Whats the file format of delitracker CUSTOM?

Post by destop »

shd wrote:
If SID tunes are like that, custom format is totally different.

What are you trying to achieve? Perhaps I can help you if you have well specified questions..


shd / uade team
http://ee.tut.fi/~heikki/uade.html
Im wanting to convert the music from the AMiga game 'Hybris' to MOD.

I know people stress the fact that its best to have the music in its original format but i would like to be able to load the music into a MOD tracker/editor.

I just want to know what sort of problems i would run into by doing so as for as loss of the conent of the original song? The game and music is fairly old so i would imagine protracker would cover pretty much every effect done in the songs?

The player code looks well written but trying to just brute force reverse the format would drive me 'postal', which is why im thinking of considering to find replay source of other players and go from there coz im sure its a predecessor of some other player allready known.

I found a version of hybris that someone claimed to have converted it to fred player and when u replay it , it sounds just very slightly different but may be a phenomenon of the replay rutine.

I havent yet compared the play rutines of all the exotica versions and the other so called [fred version] that i have but the custom format is fairly straightforward and from the delitracker development package theres enuf info for someone to make there own custom module.

Also on a side note, its interesting that the oldSkool modplayer plugin for winamp can jump ahead in a custom module.I wonder if its calling the 'update runtine' a bunch of times to 'catch up' but dont have a clue as to how it manages to back up in song like it does. And i know its having to use the 68000 emulation code to do all this.

shd
Posts: 99
Joined: Thu Jan 16, 2003 12:52 pm
Location: Tampere, Finland
Contact:

Re: Whats the file format of delitracker CUSTOM?

Post by shd »

destop wrote: Im wanting to convert the music from the AMiga game 'Hybris' to MOD.
Good luck.
destop wrote: I just want to know what sort of problems i would run into by doing so as for as loss of the conent of the original song? The game and music is fairly old so i would imagine protracker would cover pretty much every effect done in the songs?
Probably, but not necessarily. Most players are more or less sample players, but policies for effects vary. It could be that protracker and the other have same kind of mechanism, but they're somewhat different.
destop wrote: Also on a side note, its interesting that the oldSkool modplayer plugin for winamp can jump ahead in a custom module.I wonder if its calling the 'update runtine' a bunch of times to 'catch up' but dont have a clue as to how it manages to back up in song like it does. And i know its having to use the 68000 emulation code to do all this.
Going ahead should work basically like that. Going back is just buffering sample data and halting the cpu emulator;) 1 minute of 44.1kHz 16-bit stereo takes only 10MB of memory. It's nothing these days, you can easily buffer 5-6 minutes of sound data:)

shd / uade team

Post Reply