diff options
Diffstat (limited to 'macros/sound.asm')
-rw-r--r-- | macros/sound.asm | 469 |
1 files changed, 264 insertions, 205 deletions
diff --git a/macros/sound.asm b/macros/sound.asm index 35ba240..42dd18c 100644 --- a/macros/sound.asm +++ b/macros/sound.asm @@ -1,256 +1,315 @@ -channelcount: MACRO -nchannels = \1 - 1 - ENDM +channel_count: MACRO +_num_channels = \1 - 1 +ENDM channel: MACRO - db (nchannels << 6) | \1 - dw \2 -nchannels = 0 - ENDM + dn (_num_channels << 2), \1 - 1 ; channel id + dw \2 ; address +_num_channels = 0 +ENDM note: MACRO - dn (\1), (\2) - 1 - ENDM - -sound: macro - db \1 ; duration - db \2 ; intensity - dw \3 ; frequency - endm - -noise: macro - db \1 ; duration - db \2 ; intensity - db \3 ; frequency - endm - -; pitch -__ EQU 0 -C_ EQU 1 -C# EQU 2 -D_ EQU 3 -D# EQU 4 -E_ EQU 5 -F_ EQU 6 -F# EQU 7 -G_ EQU 8 -G# EQU 9 -A_ EQU 10 -A# EQU 11 -B_ EQU 12 - - -octave: macro - db $d8 - (\1) - endm - -notetype: macro - db $d8 - db \1 ; note_length - if _NARG >= 2 - db \2 ; intensity - endc - endm - -forceoctave: macro - db $d9 - db \1 ; octave - endm - -tempo: macro - db $da + dn (\1), (\2) - 1 ; pitch, length +ENDM + +drum_note: MACRO + note \1, \2 ; drum instrument, length +ENDM + +rest: MACRO + note 0, \1 ; length +ENDM + +square_note: MACRO + db \1 ; length + IF \3 < 0 + dn \2, %1000 | (\3 * -1) ; volume envelope + ELSE + dn \2, \3 ; volume envelope + ENDC + dw \4 ; frequency +ENDM + +noise_note: MACRO + db \1 ; length + IF \3 < 0 + dn \2, %1000 | (\3 * -1) ; volume envelope + ELSE + dn \2, \3 ; volume envelope + ENDC + db \4 ; frequency +ENDM + + const_def $d0 +FIRST_MUSIC_CMD EQU const_value + + const octave_cmd ; $d0 +octave: MACRO + assert 0 < (\1) && (\1) <= 8, "octave must be 1-8" + db octave_cmd | 8 - (\1) ; octave +ENDM + + const_def $d8 + + const note_type_cmd ; $d8 +note_type: MACRO + db note_type_cmd + db \1 ; note length + IF _NARG >= 2 + IF \3 < 0 + dn \2, %1000 | (\3 * -1) ; volume envelope + ELSE + dn \2, \3 ; volume envelope + ENDC + ENDC +ENDM + +; only valid on the noise channel +drum_speed: MACRO + note_type \1 ; note length +ENDM + + const transpose_cmd ; $d9 +transpose: MACRO + db transpose_cmd + dn \1, \2 ; num octaves, num pitches +ENDM + + const tempo_cmd ; $da +tempo: MACRO + db tempo_cmd bigdw \1 ; tempo - endm +ENDM -dutycycle: macro - db $db - db \1 ; duty_cycle - endm + const duty_cycle_cmd ; $db +duty_cycle: MACRO + db duty_cycle_cmd + db \1 ; duty cycle +ENDM -intensity: macro - db $dc - db \1 ; intensity - endm + const volume_envelope_cmd ; $dc +volume_envelope: MACRO + db volume_envelope_cmd + IF \2 < 0 + dn \1, %1000 | (\2 * -1) ; volume envelope + ELSE + dn \1, \2 ; volume envelope + ENDC +ENDM -soundinput: macro - db $dd - db \1 ; input - endm + const pitch_sweep_cmd ; $dd +pitch_sweep: MACRO + db pitch_sweep_cmd + IF \2 < 0 + dn \1, %1000 | (\2 * -1) ; pitch sweep + ELSE + dn \1, \2 ; pitch sweep + ENDC +ENDM -unknownmusic0xde: macro - db $de - db \1 ; unknown - endm + const duty_cycle_pattern_cmd ; $de +duty_cycle_pattern: MACRO + db duty_cycle_pattern_cmd + db (\1 << 6) | (\2 << 4) | (\3 << 2) | (\4 << 0) ; duty cycle pattern +ENDM -togglesfx: macro - db $df - endm + const toggle_sfx_cmd ; $df +toggle_sfx: MACRO + db toggle_sfx_cmd +ENDM -unknownmusic0xe0: macro - db $e0 - db \1 ; unknown - db \2 ; unknown - endm + const pitch_slide_cmd ; $e0 +pitch_slide: MACRO + db pitch_slide_cmd + db \1 - 1 ; duration + dn 8 - \2, \3 % 12 ; octave, pitch +ENDM -vibrato: macro - db $e1 + const vibrato_cmd ; $e1 +vibrato: MACRO + db vibrato_cmd db \1 ; delay - db \2 ; extent - endm + IF _NARG > 2 + dn \2, \3 ; extent, rate + ELSE + db \2 ; LEGACY: Support for 1-arg extent + ENDC +ENDM -unknownmusic0xe2: macro - db $e2 + const unknownmusic0xe2_cmd ; $e2 +unknownmusic0xe2: MACRO + db unknownmusic0xe2_cmd db \1 ; unknown - endm - -togglenoise: macro - db $e3 - db \1 ; id - endm - -panning: macro - db $e4 - db \1 ; tracks - endm - -volume: macro - db $e5 - db \1 ; volume - endm - -tone: macro - db $e6 - bigdw \1 ; tone - endm - -unknownmusic0xe7: macro - db $e7 +ENDM + + const toggle_noise_cmd ; $e3 +toggle_noise: MACRO + db toggle_noise_cmd + IF _NARG > 0 + db \1 ; drum kit + ENDC +ENDM + + const force_stereo_panning_cmd ; $e4 +force_stereo_panning: MACRO + db force_stereo_panning_cmd + dn %1111 * (1 && \1), %1111 * (1 && \2) ; left enable, right enable +ENDM + + const volume_cmd ; $e5 +volume: MACRO + db volume_cmd + IF _NARG > 1 + dn \1, \2 ; left volume, right volume + ELSE + db \1 ; LEGACY: Support for 1-arg volume + ENDC +ENDM + + const pitch_offset_cmd ; $e6 +pitch_offset: MACRO + db pitch_offset_cmd + bigdw \1 ; pitch offset +ENDM + + const unknownmusic0xe7_cmd ; $e7 +unknownmusic0xe7: MACRO + db unknownmusic0xe7_cmd db \1 ; unknown - endm +ENDM -unknownmusic0xe8: macro - db $e8 + const unknownmusic0xe8_cmd ; $e8 +unknownmusic0xe8: MACRO + db unknownmusic0xe8_cmd db \1 ; unknown - endm +ENDM -globaltempo: macro - db $e9 - bigdw \1 ; value - endm + const tempo_relative_cmd ; $e9 +tempo_relative: MACRO + db tempo_relative_cmd + bigdw \1 ; tempo adjustment +ENDM -restartchannel: macro - db $ea + const restart_channel_cmd ; $ea +restart_channel: MACRO + db restart_channel_cmd dw \1 ; address - endm +ENDM -newsong: macro - db $eb + const new_song_cmd ; $eb +new_song: MACRO + db new_song_cmd bigdw \1 ; id - endm +ENDM -sfxpriorityon: macro - db $ec - endm + const sfx_priority_on_cmd ; $ec +sfx_priority_on: MACRO + db sfx_priority_on_cmd +ENDM -sfxpriorityoff: macro - db $ed - endm + const sfx_priority_off_cmd ; $ed +sfx_priority_off: MACRO + db sfx_priority_off_cmd +ENDM -unknownmusic0xee: macro - db $ee + const unknownmusic0xee_cmd ; $ee +unknownmusic0xee: MACRO + db unknownmusic0xee_cmd dw \1 ; address - endm +ENDM -stereopanning: macro - db $ef - db \1 ; tracks - endm + const stereo_panning_cmd ; $ef +stereo_panning: MACRO + db stereo_panning_cmd + dn %1111 * (1 && \1), %1111 * (1 && \2) ; left enable, right enable +ENDM -sfxtogglenoise: macro - db $f0 - db \1 ; id - endm + const sfx_toggle_noise_cmd ; $f0 +sfx_toggle_noise: MACRO + db sfx_toggle_noise_cmd + IF _NARG > 0 + db \1 ; drum kit + ENDC +ENDM -music0xf1: macro - db $f1 - endm + const music0xf1_cmd ; $f1 +music0xf1: MACRO + db music0xf1_cmd +ENDM -music0xf2: macro - db $f2 - endm + const music0xf2_cmd ; $f2 +music0xf2: MACRO + db music0xf2_cmd +ENDM -music0xf3: macro - db $f3 - endm + const music0xf3_cmd ; $f3 +music0xf3: MACRO + db music0xf3_cmd +ENDM -music0xf4: macro - db $f4 - endm + const music0xf4_cmd ; $f4 +music0xf4: MACRO + db music0xf4_cmd +ENDM -music0xf5: macro - db $f5 - endm + const music0xf5_cmd ; $f5 +music0xf5: MACRO + db music0xf5_cmd +ENDM -music0xf6: macro - db $f6 - endm + const music0xf6_cmd ; $f6 +music0xf6: MACRO + db music0xf6_cmd +ENDM -music0xf7: macro - db $f7 - endm + const music0xf7_cmd ; $f7 +music0xf7: MACRO + db music0xf7_cmd +ENDM -music0xf8: macro - db $f8 - endm + const music0xf8_cmd ; $f8 +music0xf8: MACRO + db music0xf8_cmd +ENDM -unknownmusic0xf9: macro - db $f9 - endm + const unknownmusic0xf9_cmd ; $f9 +unknownmusic0xf9: MACRO + db unknownmusic0xf9_cmd +ENDM -setcondition: macro - db $fa + const set_condition_cmd ; $fa +set_condition: MACRO + db set_condition_cmd db \1 ; condition - endm +ENDM -jumpif: macro - db $fb + const sound_jump_if_cmd ; $fb +sound_jump_if: MACRO + db sound_jump_if_cmd db \1 ; condition dw \2 ; address - endm +ENDM -jumpchannel: macro - db $fc + const sound_jump_cmd ; $fc +sound_jump: MACRO + db sound_jump_cmd dw \1 ; address - endm +ENDM -loopchannel: macro - db $fd + const sound_loop_cmd ; $fd +sound_loop: MACRO + db sound_loop_cmd db \1 ; count dw \2 ; address - endm +ENDM -callchannel: macro - db $fe + const sound_call_cmd ; $fe +sound_call: MACRO + db sound_call_cmd dw \1 ; address - endm - -endchannel: macro - db $ff - endm - -;format: pitch length (in 16ths) -; volume -; pitch (% of the octave. e.g. $80 would be halfway between octaves) -; octave -soundeffect_note: MACRO - db \1 - db \2 - db \3 - db \4 -ENDM - -soundeffect_percussion: MACRO - db \1 - db \2 - db \3 +ENDM + + const sound_ret_cmd ; $ff +sound_ret: MACRO + db sound_ret_cmd ENDM |