summaryrefslogtreecommitdiff
path: root/macros/sound.asm
diff options
context:
space:
mode:
Diffstat (limited to 'macros/sound.asm')
-rw-r--r--macros/sound.asm469
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