/* * NDSAUDIO * * Copyright (c) 2009, Mukunda Johnson (mukunda@mukunda.com) * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */ // definitions for building sequencer extensions #ifndef __NA_EXT_INC__ #define __NA_EXT_INC__ .macro VECTOR x .word \x-START .endm .macro NULLVECTOR .word 0 .endm #define MF_VOLUME 1 // modifier flags #define MF_PANNING 2 #define MF_PITCH 4 #define MF_CUTOFF 8 #define MF_RESONANCE 16 #define NAS_MODIFIER_GLOBAL 1 #define NAS_MODIFIER_CHANNEL 2 #define NAS_MODIFIER_VOICE 4 .struct 0 EXTD_ELEMENT: .space 4 EXTD_MODIFIER: .space 4 EXTD_LMEM: .space 4 EXTD_GMEM: .space 4 EXTD_PARAM1: .space 4 EXTD_PARAM2: .space 4 .struct 0 TRACK_MASTERVOL: .SPACE 2 // MASTER VOLUME 0..4096 TRACK_GLOBALVOL: .SPACE 1 // GLOBAL VOLUME 0..128 TRACK_DFLAGS: .SPACE 1 // DIRTY FLAGS TRACK_EXTENSIONS: .SPACE 4 // EXTENSION LIST TRACK_INDEX: .SPACE 1 // INDEX OF TRACK TRACK_PITCHMODE: .SPACE 1 // PITCH MODE TRACK_NNA: .SPACE 1 // NEW NOTE ACTION TRACK_ACTIVE: .SPACE 1 // ACTIVE FLAG TRACK_PITCHADJUST: .SPACE 4 // PITCH ADJUSTMENT FACTOR TRACK_GTIMER: .SPACE 4 // GLOBAL TIMER TRACK_TIMER: .SPACE 4 // DATA TIMER TRACK_TEMPO: .SPACE 4 // DATA RATE TRACK_FIRSTBLOCK: .SPACE 4 // FIRST SEQUENCER BLOCK TRACK_LASTBLOCK: .SPACE 4 // LAST SEQUENCER BLOCK TRACK_FIRSTINST: .SPACE 4 // FIRST INSTANT BLOCK TRACK_LASTINST: .SPACE 4 // LAST INSTANT BLOCK TRACK_CHSEL: .SPACE 1 // SELECTED CHANNEL TRACK_CHANNELSUSED: .SPACE 1 // NUMBER OF CHANNELS IN TRACK TRACK_CHANNELMAP: .SPACE 30 // CHANNEL MAPPING .struct 0 CHANNEL_PARENT: .SPACE 1 // PARENT TRACK CHANNEL_VOLUME: .SPACE 1 // CHANNEL VOLUME SCALE (0..128) CHANNEL_INDEX: .SPACE 1 // INDEX OF CHANNEL CHANNEL_DFLAGS: .SPACE 1 // DIRTY FLAGS CHANNEL_VOICE: .SPACE 4 // ACTIVE VOICE HANDLE .struct 0 VOICE_PANNING: .SPACE 1 // PANNING (0..128) VOICE_CUTOFF: .SPACE 1 // FILTER CUTOFF (0..128) VOICE_RESO: .SPACE 1 // FILTER RESONANCE (0..127) VOICE_DFLAGS: .SPACE 1 // DIRTY FLAGS VOICE_HANDLE: .SPACE 1 // USER HANDLE VOICE_PARENTTRACK: .SPACE 1 // PARENT TRACK VOICE_PARENTCHAN: .SPACE 1 // PARENT CHANNEL VOICE_INDEX: .SPACE 1 // INDEX OF VOICE VOICE_STATE: .SPACE 1 // CURRENT STATE VOICE_SIG: .SPACE 1 // SIGNIFICANCE VOICE_KEYOFF: .SPACE 1 // KEY OFF VOICE_RES2: .SPACE 1 // RESERVED VOICE_VOLUME: .SPACE 2 // VOLUME (0..65535) VOICE_PITCH: .SPACE 2 // CURRENT PITCH VOICE_SOURCE: .SPACE 4 // SOURCE ADDRESS VOICE_SOURCEOFS: .SPACE 4 VOICE_NEXT: .SPACE 4 // LINKED LIST NEXT NODE VOICE_PREV: .SPACE 4 // LINKED LIST PREVIOUS NODE // dirty/update flags #define DF_START 1 #define DF_VOLUME 2 #define DF_PANNING 4 #define DF_PITCH 8 #define DF_FILTER 16 #define DF_SOURCE 32 // voice states #define VS_FREE 1 #define VS_USED 2 #define VS_RELEASED 4 #define VS_LOCKED 8 .struct 0 MOD_VOLUME: .SPACE 2 // VOLUME MODIFIER + MODE MOD_PITCH: .SPACE 2 // PITCH MODIFIER MOD_PANNING: .SPACE 1 // PANNING MODIFIER MOD_CUTOFF: .SPACE 1 // CUTOFF MODIFIER MOD_RESONANCE: .SPACE 1 // RESONANCE MODIFIER MOD_MODES: .SPACE 1 // MODIFIER MODES // bits 0,1=pitch // bits 2,3=panning // bits 4,5=cutoff // bits 6,7=reso // modifier modes #define SMM_DISABLED 0 // no action #define SMM_SCALE 1 // scale value (pitch = direct add) #define SMM_ADD 2 // add values (pitch = linear add) #define SMM_OVERRIDE 3 // overwrite value #define SMM_PITCHBITS 0 #define SMM_PANBITS 2 #define SMM_COBITS 4 #define SMM_RESOBITS 6 //----------------------------------------------------- // JL_SINE( angle ) return sin(a)*8000h (256=360 degrees) // JL_COSINE( angle ) return cos(a)*8000h (256=360 degrees) // JL_PTAB( pitch ) return 2^(p/768)*10000h (p=0..768) //----------------------------------------------------- #define JL_SINE 0x00 #define JL_COSINE 0x04 #define JL_PTAB 0x08 #endif