Raster Music Tracker
From Atariki
(Różnice między wersjami)
Wersja z dnia 09:05, 19 lut 2010 0xF (Dyskusja | wkład) (1.28) ← Previous diff |
Wersja z dnia 11:08, 6 mar 2011 Tebe (Dyskusja | wkład) Next diff → |
||
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 dnia 11:08, 6 mar 2011
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.
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.