If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working soon.
The current URL is datacrystal.tcrf.net.
The current URL is datacrystal.tcrf.net.
THUNDER FORCE2/Tutorials
Jump to navigation
Jump to search
Music Hacking
BGM Header format
00: b Number of channels (always must be 09h = 6 FM + 3 PSG) 01: b Volume (99 = max, 0 = min) 02: b Tempo modifier 03: b Pitch modifier 04: w Volume table pointer 06: w Channel tracks table pointer 08: w Patterns table pointer 0A: w FM Voices bank pointer 0C: w PSG Voices bank pointer 0E: w End of file offset Credits goes to vladikcomper for the info on this. Thanks! Sharp X68000 Version 00: w ? 02: w Pointer to instrument ? 04: w ? 06: w ? Research is still in progress!
Volume Controll for each channel
10: Channel Volume Channel tracks table stores offset for all 9 sound channels used by driver in the following order: FM1, FM2, FM3, FM4, FM5, FM6, PSG1, PSG2, PSG3 Channel tracks cannot be skipped -- if the channel is unused, corresponding track should start with byte 0FFh (end of track marker). Each FM/PSG track refers to patterns from patterns table by table entry number. Both tracks and patterns can execute coordinate flags. 10: Volume for channel 1 11: Volume for channel 2 12: Volume for channel 3 13: Volume for channel 4 14: Volume for channel 5 15: Volume for channel 6 16: Volume for PSG 1 17: Volume for PSG 2 18: Volume for PSG 3
Channel Pointer
19: Pointer to channel 1 1B: Pointer to channel 2 1D: Pointer to channel 3 1F: Pointer to channel 4 21: Pointer to channel 5 23: Pointer to channel 6 25: Pointer to PSG 1 27: Pointer to PSG 2
Value Definitions
$80-$DF Notes $E0-$FF Coordination flags
Music Notes Value
C-1: 80 C#1: 81 D-1: 82 D#1: 83 E-1: 84 F-1: 85 F#1: 86 G-1: 87 G#1: 88 A-1: 89 A#1: 8A B-1: 8B C-2: 8C C#2: 8D D-2: 8E D#2: 8F E-2: 90 F-2: 91 F#2: 92 G-2: 93 G#2: 94 A-2: 95 A#2: 96 B-2: 97 C-3: 98 C#3: 99 D-3: 9A D#3: 9B E-3: 9C F-3: 9D F#3: 9E G-3: 9F G#3: A0 A-3: A1 A#3: A2 B-3: A3 C-4: A4 C#4: A5 D-4: A6 D#4: A7 E-4: A8 F-4: A9 F#4: AA G-4: AB G#4: AC A-4: AD A#4: AE B-4: AF C-5: B0 C#5: B1 D-5: B2 D#5: B3 E-5: B4 F-5: B5 F#5: B6 G-5: B7 G#5: B8 A-5: B9 A#5: BA B-5: BB C-6: BC C#6: BD D-6: BE D#6: BF E-6: C0 F-6: C1 F#6: C2 G-6: C3 G#6: C4 A-6: C5 A#6: C6 B-6: C7 C-7: C8 C#7: C9 D-7: CA D#7: CB E-7: CC F-7: CD F#7: CE G-7: CF G#7: D0 A-7: D1 A#7: D2 B-7: D3 C-8: D4 C#8: D5 D-8: D6 D#8: D7 E-8: D8 F-8: D9 F#8: DA G-8: DB G#8: DC A-8: DD A#8: DE B-8: DF
Coordination flags
E0 - LoadInstrument E1 - SetPan E2 - PSGEffect E3 - SetSlideSpeed E4 - AMS_FMS_Speed E5 - SkipPatterns_or_Sync E6 - SetArgument E7 - AlterArgument E8 - AlterNote E9 - AlterVolume EA - AlterTempo EB - SetFreqDisplacement EC - SetRepeat ED - SetFadeSpeed F0 - DisableAMS_FMS F1 - EnableAMS_FMS F2 - DisablePSGNoise F3 - EnablePSGNoise F4 - SetPortamentoMode0 F5 - SetPortamentoMode1 F6 - SetPortamentoMode2 F7 - SetPortamentoMode3 FD - repeat_pattern Credits goes to vladikcomper for the info on this. Thanks!