summaryrefslogtreecommitdiff
path: root/macros/audio.asm
diff options
context:
space:
mode:
Diffstat (limited to 'macros/audio.asm')
-rwxr-xr-xmacros/audio.asm397
1 files changed, 217 insertions, 180 deletions
diff --git a/macros/audio.asm b/macros/audio.asm
index 8ebf840..3300a25 100755
--- a/macros/audio.asm
+++ b/macros/audio.asm
@@ -1,278 +1,315 @@
-Ch0 EQU 0
-Ch1 EQU 1
-Ch2 EQU 2
-Ch3 EQU 3
-Ch4 EQU 4
-Ch5 EQU 5
-Ch6 EQU 6
-Ch7 EQU 7
-
-audio: MACRO
- db (_NARG - 2) << 6 | \2
- dw \1_\2
- IF _NARG > 2
- db \3
- dw \1_\3
- ENDC
- IF _NARG > 3
- db \4
- dw \1_\4
- ENDC
- IF _NARG > 4
- db \5
- dw \1_\5
- ENDC
+channel_count: MACRO
+_num_channels = \1 - 1
ENDM
-;format: length [0, 7], pitch change [-7, 7]
-pitchenvelope: MACRO
- db $10
- IF \2 > 0
- db (\1 << 4) | \2
- ELSE
- db (\1 << 4) | (%1000 | (\2 * -1))
- ENDC
+channel: MACRO
+ dn (_num_channels << 2), \1 - 1 ; channel id
+ dw \2 ; address
+_num_channels = 0
ENDM
-;format: length [0, 15], volume [0, 15], volume change [-7, 7], pitch
-squarenote: MACRO
- db $20 | \1
+note: MACRO
+ 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
- db (\2 << 4) | (%1000 | (\3 * -1))
+ dn \2, %1000 | (\3 * -1) ; volume envelope
ELSE
- db (\2 << 4) | \3
+ dn \2, \3 ; volume envelope
ENDC
- dw \4
+ dw \4 ; frequency
ENDM
-;format: length [0, 15], volume [0, 15], volume change [-7, 7], pitch
-noisenote: MACRO
- db $20 | \1
+noise_note: MACRO
+ db \1 ; length
IF \3 < 0
- db (\2 << 4) | (%1000 | (\3 * -1))
+ dn \2, %1000 | (\3 * -1) ; volume envelope
ELSE
- db (\2 << 4) | \3
+ dn \2, \3 ; volume envelope
ENDC
- db \4
+ db \4 ; frequency
ENDM
-;format: rest length (in 16ths)
-rest: MACRO
- db $00 | (\1 - 1)
-ENDM
+; MusicCommands indexes (see audio/engine.asm)
+ const_def $d0
+FIRST_MUSIC_CMD EQU const_value
-;format: pitch length (in 16ths)
-C_: MACRO
- db $10 | (\1 - 1)
+ const octave_cmd ; $d0
+octave: MACRO
+ db octave_cmd | 8 - (\1) ; octave
ENDM
-C#: MACRO
- db $20 | (\1 - 1)
-ENDM
+ const_skip 7 ; all octave values
-D_: MACRO
- db $30 | (\1 - 1)
+ 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
-D#: MACRO
- db $40 | (\1 - 1)
+; only valid on the noise channel
+drum_speed: MACRO
+ note_type \1 ; note length
ENDM
-E_: MACRO
- db $50 | (\1 - 1)
+ const transpose_cmd ; $d9
+transpose: MACRO
+ db transpose_cmd
+ dn \1, \2 ; num octaves, num pitches
ENDM
-F_: MACRO
- db $60 | (\1 - 1)
+ const tempo_cmd ; $da
+tempo: MACRO
+ db tempo_cmd
+ bigdw \1 ; tempo
ENDM
-F#: MACRO
- db $70 | (\1 - 1)
+ const duty_cycle_cmd ; $db
+duty_cycle: MACRO
+ db duty_cycle_cmd
+ db \1 ; duty cycle
ENDM
-G_: MACRO
- db $80 | (\1 - 1)
+ 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
-G#: MACRO
- db $90 | (\1 - 1)
+ 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
-A_: MACRO
- db $A0 | (\1 - 1)
+ 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
-A#: MACRO
- db $B0 | (\1 - 1)
+ const toggle_sfx_cmd ; $df
+toggle_sfx: MACRO
+ db toggle_sfx_cmd
ENDM
-B_: MACRO
- db $C0 | (\1 - 1)
+ const pitch_slide_cmd ; $e0
+pitch_slide: MACRO
+ db pitch_slide_cmd
+ db \1 - 1 ; duration
+ dn 8 - \2, \3 % 12 ; octave, pitch
ENDM
-;format: instrument length (in 16ths)
-snare1: MACRO
- db $10 | (\1 - 1)
+ const vibrato_cmd ; $e1
+vibrato: MACRO
+ db vibrato_cmd
+ db \1 ; delay
+ IF _NARG > 2
+ dn \2, \3 ; extent, rate
+ ELSE
+ db \2 ; LEGACY: Support for 1-arg extent
+ ENDC
ENDM
-snare2: MACRO
- db $20 | (\1 - 1)
+ const unknownmusic0xe2_cmd ; $e2
+unknownmusic0xe2: MACRO
+ db unknownmusic0xe2_cmd
+ db \1 ; unknown
ENDM
-snare3: MACRO
- db $30 | (\1 - 1)
+ const toggle_noise_cmd ; $e3
+toggle_noise: MACRO
+ db toggle_noise_cmd
+ IF _NARG > 0
+ db \1 ; drum kit
+ ENDC
ENDM
-snare4: MACRO
- db $40 | (\1 - 1)
+ 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
-snare5: MACRO
- db $50 | (\1 - 1)
+ 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
-triangle1: MACRO
- db $60 | (\1 - 1)
+ const pitch_offset_cmd ; $e6
+pitch_offset: MACRO
+ db pitch_offset_cmd
+ bigdw \1 ; pitch offset
ENDM
-triangle2: MACRO
- db $70 | (\1 - 1)
+ const unknownmusic0xe7_cmd ; $e7
+unknownmusic0xe7: MACRO
+ db unknownmusic0xe7_cmd
+ db \1 ; unknown
ENDM
-snare6: MACRO
- db $80 | (\1 - 1)
+ const unknownmusic0xe8_cmd ; $e8
+unknownmusic0xe8: MACRO
+ db unknownmusic0xe8_cmd
+ db \1 ; unknown
ENDM
-snare7: MACRO
- db $90 | (\1 - 1)
+ const tempo_relative_cmd ; $e9
+tempo_relative: MACRO
+ db tempo_relative_cmd
+ bigdw \1 ; tempo adjustment
ENDM
-snare8: MACRO
- db $A0 | (\1 - 1)
+ const restart_channel_cmd ; $ea
+restart_channel: MACRO
+ db restart_channel_cmd
+ dw \1 ; address
ENDM
-snare9: MACRO
- db $B0 | (\1 - 1)
+ const new_song_cmd ; $eb
+new_song: MACRO
+ db new_song_cmd
+ bigdw \1 ; id
ENDM
-cymbal1: MACRO
- db $C0 | (\1 - 1)
+ const sfx_priority_on_cmd ; $ec
+sfx_priority_on: MACRO
+ db sfx_priority_on_cmd
ENDM
-cymbal2: MACRO
- db $D0 | (\1 - 1)
+ const sfx_priority_off_cmd ; $ed
+sfx_priority_off: MACRO
+ db sfx_priority_off_cmd
ENDM
-cymbal3: MACRO
- db $E0 | (\1 - 1)
+ const unknownmusic0xee_cmd ; $ee
+unknownmusic0xee: MACRO
+ db unknownmusic0xee_cmd
+ dw \1 ; address
ENDM
-mutedsnare1: MACRO
- db $F0 | (\1 - 1)
+ const unknownmusic0xef_cmd ; $ef
+unknownmusic0xef: MACRO
+ db unknownmusic0xef_cmd
+ dw \1 ; address
ENDM
-; TODO: clean up handling of drumsets
-;triangle3: MACRO
-; db $10 | (\1 - 1)
-;ENDM
-
-;mutedsnare2: MACRO
-; db $11 | (\1 - 1)
-;ENDM
-
-;mutedsnare3: MACRO
-; db $12 | (\1 - 1)
-;ENDM
-
-;mutedsnare4: MACRO
-; db $13 | (\1 - 1)
-;ENDM
-
-octave: MACRO
- db $D8 - \1
+ const sfx_toggle_noise_cmd ; $f0
+sfx_toggle_noise: MACRO
+ db sfx_toggle_noise_cmd
+ IF _NARG > 0
+ db \1 ; drum kit
+ ENDC
ENDM
-; format: notetype speed, volume, fade
-notetype: MACRO
- db $D8
- db \1
- db (\2 << 4) | \3
+ const music0xf1_cmd ; $f1
+music0xf1: MACRO
+ db music0xf1_cmd
ENDM
-dspeed: MACRO
- db $D8
- db \1
+ const music0xf2_cmd ; $f2
+music0xf2: MACRO
+ db music0xf2_cmd
ENDM
-tempo: MACRO
- db $DA
- db \1 / $100
- db \1 % $100
+ const music0xf3_cmd ; $f3
+music0xf3: MACRO
+ db music0xf3_cmd
ENDM
-duty: MACRO
- db $DB
- db \1
+ const music0xf4_cmd ; $f4
+music0xf4: MACRO
+ db music0xf4_cmd
ENDM
-pitchbend: MACRO
- db $E0
- db \1
- db \2
+ const music0xf5_cmd ; $f5
+music0xf5: MACRO
+ db music0xf5_cmd
ENDM
-;format: vibrato delay, rate, depth
-vibrato: MACRO
- db $E1
- db \1
- db (\2 << 4) | \3
+ const music0xf6_cmd ; $f6
+music0xf6: MACRO
+ db music0xf6_cmd
ENDM
-drumset: MACRO
- db $E3
- db \1
+ const music0xf7_cmd ; $f7
+music0xf7: MACRO
+ db music0xf7_cmd
ENDM
-volume: MACRO
- db $E5
- db (\1 << 4) | \2
+ const music0xf8_cmd ; $f8
+music0xf8: MACRO
+ db music0xf8_cmd
ENDM
-toggleperfectpitch: MACRO
- db $E6
+ const unknownmusic0xf9_cmd ; $f9
+unknownmusic0xf9: MACRO
+ db unknownmusic0xf9_cmd
ENDM
-stereopanning: MACRO
- db $EE
- db \1
+ const set_condition_cmd ; $fa
+set_condition: MACRO
+ db set_condition_cmd
+ db \1 ; condition
ENDM
-;executemusic: MACRO
-; db $F8
-;ENDM
-
-unknown_f9: MACRO
- db $F9
+ const sound_jump_if_cmd ; $fb
+sound_jump_if: MACRO
+ db sound_jump_if_cmd
+ db \1 ; condition
+ dw \2 ; address
ENDM
-;dutycycle: MACRO
-; db $FC
-; db \1
-;ENDM
+ const sound_jump_cmd ; $fc
+sound_jump: MACRO
+ db sound_jump_cmd
+ dw \1 ; address
+ENDM
-;format: loopchannel count, address
-loopchannel: MACRO
- db $FD
- db \1
- dw \2
+ const sound_loop_cmd ; $fd
+sound_loop: MACRO
+ db sound_loop_cmd
+ db \1 ; count
+ dw \2 ; address
ENDM
-;format: callchannel address
-callchannel: MACRO
- db $FE
- dw \1
+ const sound_call_cmd ; $fe
+sound_call: MACRO
+ db sound_call_cmd
+ dw \1 ; address
ENDM
-endchannel: MACRO
- db $FF
+ const sound_ret_cmd ; $ff
+sound_ret: MACRO
+ db sound_ret_cmd
ENDM