Raster Music Tracker: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
0xF (dyskusja | edycje)
m 1.28
Tebe (dyskusja | edycje)
Nie podano opisu zmian
Linia 3: Linia 3:


http://raster.infos.cz/atari/rmt/rmt1.gif
http://raster.infos.cz/atari/rmt/rmt1.gif
<BR>
Format zapisu modułu RMT:
<pre>
RMT 1.x module format
--------------------------------
header struct
=============
offset type desc
------ ---- ----
00 WORD header string 'RMT4' or 'RMT8'
04 BYTE track len ($00 means 256)
05 BYTE song speed
06 BYTE player freq
07 BYTE format version number ($01 for player routine 1.x compatible format)
08 WORD pointer to instruments table
0a WORD pointer to tracks table (lo)
0c WORD pointer to tracks table (hi)
0e WORD pointer to tracks list (SONG)
instrument struct
=================
offset type desc
------ ---- ----
00 BYTE tlen (pointer to end of table of notes)
01 BYTE tgo (pointer to loop of table of notes)
02 BYTE elen (pointer to end of envelope)
03 BYTE ego (pointer to loop of envelope)
04 BYTE tspd (bit 0-5), tmode (bit 6), ttype (bit 7)
05 BYTE audctl
06 BYTE vslide
07 BYTE vmin(bit 4-7)
08 BYTE delay ($00 for no vibrato & no fshift)
09 BYTE vibrato
0a BYTE fshift
0b BYTE unused
0c table of notes
? envelope
TABLE OF NOTES struct
=====================
BYTE note or frequence (according to the ttype)
ENVELOPE struct
===============
BYTE volume (bit 0-3 left channel) (bits 4-7 right channel
      (in RMT4 it's the same as bits 0-3))
BYTE portamento (bit 0), distortion(bit 1-3),
      command (bit 4-6), filter (bit 7)
BYTE XY
TRACK struct
============
BYTE
bit 0-5 note
bit 6-7 volume(HI) or pause(1-3 beats) or special
if note is $00-$3c:
BYTE
bit 0-1 volume(LO)
bit 2-7 instrument number
if note is $3d:
BYTE
bit 0-1 volume(LO) volume only
if note is $3e:
bit 6-7 pause
if pause is $01-$03: pause 1-3 beats
if pause is $00: next byte pause 1-255 beats
if note is $3f:
if bit 6-7 is zero: next byte speed $01-$ff
if bit 6 is zero, 7 is set up: next byte is track jump pointer
(go to $00-$ff from the begin of track data)
if bit 6-7 is set up: END of track
INSTRUMENTS TABLE
=================
WORD ptr_instr0
WORD ptr_instr1
WORD ptr_instr3
...
TRACKS TABLE (LO)
=================
BYTE lowbyte_of_ptr_track0
BYTE lowbyte_of_ptr_track1
BYTE lowbyte_of_ptr_track2
...
TRACKS TABLE (HI)
=================
BYTE highbyte_of_ptr_track0
BYTE highbyte_of_ptr_track1
BYTE highbyte_of_ptr_track2
...
TRACK LIST struct (SONG)
========================
BYTE tracknumL1,tracknumL2,tracknumL3,tracknumL4,[tracknumR1,..,tracknumR4]
BYTE tracknumL1,tracknumL2,tracknumL3,tracknumL4,[tracknumR1,..,tracknumR4]
BYTE tracknumL1,tracknumL2,tracknumL3,tracknumL4,[tracknumR1,..,tracknumR4]
...
if tracknum is FF, then empty track is used
if tracknumL1 is FE, then gotoline(BYTE)=tracknumL2, goto_pointer(WORD)=(tracknumL3,4)
Note: gotoline(BYTE) is not used in player (but tracker uses it)
</pre>





Wersja z 6 mar 2011, 13:08

Program działający w środowisku MS Windows umożliwiający tworzenie 4- jak i 8-kanałowych (Stereo) modułów dla ośmiobitowego Atari przy wykorzystaniu bibliotek emulujących układy 6502 i POKEY. Autorem jest Raster/C.P.U. Program jest ciągle rozwijany, najnowsza dostępna obecnie wersja to 1.28.


http://raster.infos.cz/atari/rmt/rmt1.gif


Format zapisu modułu RMT:

RMT 1.x module format
--------------------------------


header struct
=============

offset	type	desc
------	----	----
00	WORD	header string 'RMT4' or 'RMT8'
04	BYTE	track len ($00 means 256)
05	BYTE	song speed
06	BYTE	player freq
07	BYTE	format version number ($01 for player routine 1.x compatible format)
08	WORD	pointer to instruments table
0a	WORD 	pointer to tracks table (lo)
0c	WORD	pointer to tracks table (hi)
0e	WORD	pointer to tracks list (SONG)


instrument struct
=================

offset	type	desc
------	----	----
00	BYTE	tlen (pointer to end of table of notes)
01	BYTE 	tgo (pointer to loop of table of notes)
02	BYTE	elen (pointer to end of envelope)
03	BYTE	ego (pointer to loop of envelope)
04	BYTE	tspd (bit 0-5), tmode (bit 6), ttype (bit 7)
05	BYTE	audctl
06	BYTE	vslide
07	BYTE	vmin(bit 4-7)
08	BYTE	delay ($00 for no vibrato & no fshift)
09	BYTE	vibrato
0a	BYTE	fshift
0b	BYTE	unused
0c		table of notes
?		envelope


TABLE OF NOTES struct
=====================
	BYTE	note or frequence (according to the ttype)


ENVELOPE struct
===============
	BYTE	volume (bit 0-3 left channel) (bits 4-7 right channel
	      (in RMT4 it's the same as bits 0-3))
	BYTE	portamento (bit 0), distortion(bit 1-3),
	      command (bit 4-6), filter (bit 7)
	BYTE	XY


TRACK struct
============

BYTE
	bit 0-5	note
	bit 6-7	volume(HI) or pause(1-3 beats) or special

if note is $00-$3c:
BYTE
	bit 0-1	volume(LO)
	bit 2-7 instrument number

if note is $3d:
BYTE
	bit 0-1	volume(LO)	volume only

if note is $3e:
	bit 6-7 pause
	if pause is $01-$03:	pause 1-3 beats
	if pause is $00:	next byte pause 1-255 beats

if note is $3f:
	if bit 6-7 is zero: next byte speed $01-$ff
	if bit 6 is zero, 7 is set up: next byte is track jump pointer
	(go to $00-$ff from the begin of track data)
	if bit 6-7 is set up: END of track

INSTRUMENTS TABLE
=================
	WORD	ptr_instr0
	WORD	ptr_instr1
	WORD	ptr_instr3
	...

TRACKS TABLE (LO)
=================
	BYTE	lowbyte_of_ptr_track0
	BYTE	lowbyte_of_ptr_track1
	BYTE	lowbyte_of_ptr_track2
	...

TRACKS TABLE (HI)
=================
	BYTE	highbyte_of_ptr_track0
	BYTE	highbyte_of_ptr_track1
	BYTE	highbyte_of_ptr_track2
	...

TRACK LIST struct (SONG)
========================
	BYTE	tracknumL1,tracknumL2,tracknumL3,tracknumL4,[tracknumR1,..,tracknumR4]
	BYTE	tracknumL1,tracknumL2,tracknumL3,tracknumL4,[tracknumR1,..,tracknumR4]
	BYTE	tracknumL1,tracknumL2,tracknumL3,tracknumL4,[tracknumR1,..,tracknumR4]
	...

if tracknum is FF, then empty track is used

if tracknumL1 is FE, then gotoline(BYTE)=tracknumL2, goto_pointer(WORD)=(tracknumL3,4)
	Note: gotoline(BYTE) is not used in player (but tracker uses it)


Zobacz też


Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.