Karoshi MSX Community
05 de Julio de 2021, 10:46:44 am *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Noticias:
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]
  Imprimir  
Autor Tema: Some Pt3 info  (Leído 9997 veces)
0 Usuarios y 1 Visitante están viendo este tema.
Dioniso
Visitante
« : 04 de Septiembre de 2006, 11:12:55 am »

Hello.

Long ago I tried to write a kind of doc about PT3 modules. I stopped it but due to a certain person who asked for it ... (this goes especially for Nerlaska) I write here what I have. I can't remember exactly what I wrote on some papers so when you see something like (?), it means I can't remember what I wrote  Shocked Shocked Shocked

It would be very nice if someone could complete the info here given. It's very easy; just write some basic on Vortex Tracker II and start watching with an hex-viewer the changes ... at least, that's what I did  Grin

Have fun.

===========================================================================

PT3 format:

*Info inside the module*

$00: "ProTracker 3."
$0D: Version (always "5" for Vortex Tracker II).
$0E: " compilation of "
$1E: Name of the module.
$3E: " by "
$42: Author of the module.
$63: Frequency table (from 1 to 4).
$64: Speed ----------------------------------------------------------- Delay:    1 byte
$65: Number of patterns.
$66: Pattern loop --------------------------------------------------- LPosPtr:  1 byte
$67: Position of patterns inside the module ---------------- PatsPtrs: 2 bytes
$69: Position of samples inside the module ----------------- SamPtrs:  2 bytes
     (2 bytes per address * 32 samples = 64 bytes)
$A9: Position of ornaments inside the module ------------- OrnPtrs:  2 bytes
     (2 bytes per address * 16 ornaments = 32 bytes)
$C9: It points to where the patterns order ist ------------- CrPsPtr:  2 bytes
     If you have a look to where this address points you can see, for instance,
     $00,$03,$06,$03,$FF, which means:

pattern 0 ($00), pattern 1 ($03), pattern 2 ($06), pattern 1 ($03), END ($FF).
As you can see, you have to multiply for 3 every pattern number.

------------------------------------------------------------------------------

Now, in group of 6 bytes, come the address of every channel of every pattern.
So the first 6 bytes will point to the address of channel A, B and C of
pattern 0 (3 channels * 2 bytes = 6 bytes). The next 6 bytes to the 3 channels
of pattern 1, etc ...

------------------------------------------------------------------------------

In $69 (SamPtrs) we have the address where the definition of the samples
start. So $69 and $70 will contain the address of the definition of the first
sample in the module. $71 and $72 of the second, and so on.

The definition of the samples are like this:

byte 1: Loop
byte 2: Length of the sample
byte 3: 0 0 0 0 0 0 0 0
           ¦_¦ ¦______¦ ¦___ 0: Envelope   1: No envelope
            ¦         ¦
            ¦         ¦________ Noise: 0 - 31
            ¦
            ¦______________ 10: Volume down   11: Volume up

byte 4: 0 0 0 0 0 0 0 0
           ¦_¦ ¦_¦  ¦____¦
            ¦    ¦       ¦
            ¦    ¦       ¦______ Volume
            ¦    ¦
            ¦    ¦___________ Noise slide (?)
            ¦
            ¦______________ Frequency slide (?)

byte 5: Low byte.
byte 6: High byte.
These two bytes (5 and 6) contain the frequency slide. In case of negative
slide (higher pitch) the frequency you want to rest is rested to $FFFF and
stored in these 2 bytes.

Bytes 3,4,5 and 6 form a line of the sample (raster). So a sample will have
so many groups of these bytes as lines has the sample.

------------------------------------------------------------------------------

Definition of ornaments are much easier:

Byte 1: Loop
Byte 2: Length
Byte 3: Note (0-95)

The same as for samples. Byte 3 contains the definition of one line so there
will be as much bytes containing the new note as lines of definition has the
ornament.

------------------------------------------------------------------------------

Now it becomes more complex Smiley

The address of the channels of every pattern come in group of 6, as we said.
If we go to the address pointed for channel A (the first 2 bytes of those 6)
we'll have definition of the channel A in the tracker. The bytes are coded so
we have to read the higher 4 bites:

$4x: Ornament ($40-$4F)
$50-$AF: Note to play. There are 96 (12 notes * 8 octaves). The byte before
         this one tells the length in lines inside the tracker. For instance:
         $05,$50 will play C1 (Do in octave 1) during 5 lines of tracker. If
         the Speed (Delay) is 6, the player will play this note during 30
         (6 rasters * 5 lines in tracker) rasters.
$Bx: Envelope. We have to add 1 to know which value should we give to register
     13. If there's envelope (a value different to $B1) the next 2 bytes are
     register 12 and register 11 of the PSG. An example: $B9, $00, $50 means
     R13=$08, R12=$00, R11=$50.
$Cx: Volume - $C0-$CF
$Dx: Sample - $D0-$EF
$0X: Effects/Commands ... The values they handle are set after note value
     ($50-$AF).

*Effects*

$01: Sound frequency decreasing in that channel.
     First byte indicates the delay used to add the new frequency.
     Next 2 bytes will indicate the frequency to add. Example:
     $02,$23,$00 will add $23 to the final frequency in that raster
     and another $23 every 2 rasters.

$01: Sound frequency increasing in that channel.
     It's the same as above but the value is rested to $FFFF. Example:
     $01,$DD,$FF will rest $23 to the final frequency in every raster.

$02: Tone portamento.
     First byte is delay again. (?)

$03: Starts playing sample from a particular position/line definition.
     Byte indicates from which position.

$04: Starts playing ornament from a particular position/line definition.
     Byte indicates from which position.

$06: Periodical sound off/on in that channel.
     Two bytes are used here. The first one tells how many rasters will be
     played and the second how many will be not. Example. $03,$04 means
     that that channel will be played 3 rasters, 4 not played, 3 played, ...

$08: Envelope frequency increasing.
     Two bytes will indicate the frequency to add to registers R12 and R11.
     Example: $34,$00 will add $34 to R11.

$09: Set playing speed (new Delay).
     The byte after the note will tell the new delay.

$0A: Envelope frequency decreasing.
     Same as increasing but the value is rested to $FFFF.
     Example: $CC,$FF will rest $34 to R11.

------------------------------------------------------------------------------

*Example 1*

So if we have this in the module: $D2,$CF,$B1,$05,$50 we will have this in the
tracker:

C-1   2..F   ....
---     ....    ....
---     ....    ....
---     ....    ....
---     ....    ....

$D2: Sample 2    ($Dx samples)
$CF: Volume 15   ($Cx volume)
$B1: No envelope ($Bx envelope)
$05,$50: Play note $50 (C1) during five tracker lines.

*Example 2*

If we have this in the module: $D1,$CE,$09,$B1,$08,$50,$07

$D1: Sample 1.
$CE: Volume 14.
$09: New delay will be set. See after note is set.
$B1: No envelope.
$08,$50: Play note $50 (C1) during eight tracker lines.
$07: New Delay.

===========================================================================
En línea
pitpan
Karoshi Forum's Guru
*******
Mensajes: 1812


« Respuesta #1 : 05 de Septiembre de 2006, 07:58:22 pm »

That's useful information. Thanks for sharing it with us, Dioniso.  Smiley
En línea
Huey
Karoshi Newbie
*
Mensajes: 10


« Respuesta #2 : 20 de Agosto de 2010, 05:36:34 pm »

Sorry for bumping this old thread. But I just had to thank you Doniso for your explanation.

It is just what I needed. B-)
En línea
Dioniso
Visitante
« Respuesta #3 : 20 de Agosto de 2010, 08:37:29 pm »

I just had to thank you Doniso for your explanation.

It is just what I needed. B-)

You are very welcome  Smiley
En línea
Huey
Karoshi Newbie
*
Mensajes: 10


« Respuesta #4 : 07 de Marzo de 2011, 01:14:07 pm »

Is it true that the global noise is at (0x20 - 0x3f) of channel A data?

And how is the global envelope stored? 0x00 - 0x1f?
« Última modificación: 07 de Marzo de 2011, 03:22:38 pm por Huey » En línea
Huey
Karoshi Newbie
*
Mensajes: 10


« Respuesta #5 : 08 de Marzo de 2011, 12:53:14 am »

Duh. Embarrassed

I see now. Sorry. Forget my questions. Ray - Qbiqs
En línea
Páginas: [1]
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2013, Simple Machines XHTML 1.0 válido! CSS válido!