;
; constants.h: application constants
;
; author: Marko Kanala, raato ]a t[ mulletronic.com
;
; LICENSE
; Creative Commons Attribution-NonCommercial-ShareALike 2.5
;
; You are free:
;
; * to copy, distribute, display, and perform the work
; * to make derivative works
;
; Under the following conditions:
;	
; 1. Attribution. You must attribute the work in the manner specified by the 
;    author or licensor.
; 2. Noncommercial. You may not use this work for commercial purposes.
; 3. Share Alike. If you alter, transform, or build upon this work, you may 
;    distribute the resulting work only under a license identical to this one.
;
; * For any reuse or distribution, you must make clear to others the license 
;   terms of this work.
; * Any of these conditions can be waived if you get permission from the 
;   copyright holder.
;
; Your fair use and other rights are in no way affected by the above.
;
; This is a human-readable summary of the Legal Code.
; See full license at http://creativecommons.org/licenses/by-nc-sa/2.5/legalcode
;
; Copyright: Marko Kanala (raato@mulletronic.com).
;

; pattern data offsets, pattern data is
;  considered to start after the pattern name

; scale = msb nybble, pat length = lsb nybble
PAT_SCALELENGTH		equ		0		; 0c
; shuffle amount = msg nybble, flam amount = lsb nybble
PAT_SHUFFLEFLAM		equ		1		; 0d
; pattern steps
PAT_TRIGS			equ		2		; 0e
; PAT_BDRUM			equ		2		; 0e
; PAT_SDRUM			equ		4		; 10
; PAT_LTOM			equ		6		; 12
; PAT_MTOM			equ		8		; 14
; PAT_HTOM			equ		10		; 16
; PAT_RSHOT			equ		12		; 18
; PAT_HCLAP			equ		14		; 1a
; PAT_CHIHAT		equ		16		; 1c
; PAT_OHIHAT		equ		18		; 1e
; PAT_CRASH			equ		20		; 20
; PAT_RIDE			equ		22		; 22
PAT_ACCENT			equ		24		; 24
; pattern accents
PAT_ACCENTS			equ		26		; 26
; ACC_BDRUM			equ		26		; 26
; ACC_SDRUM			equ		28
; ACC_LTOM			equ		30
; ACC_MTOM			equ		32
; ACC_HTOM			equ		34
; ACC_RSHOT			equ		36
; ACC_HCLAP			equ		38
; ACC_CHIHAT		equ		40
; ACC_OHIHAT		equ		42
; ACC_CRASH			equ		44
; ACC_RIDE			equ		46		; 3a
; pattern flams
PAT_FLAMS			equ		48		; 3c
; FLAM_BDRUM		equ		48		; 3c
; FLAM_SDRUM		equ		50
; FLAM_LTOM			equ		52
; FLAM_MTOM			equ		54
; FLAM_HTOM			equ		56
; FLAM_RSHOT		equ		58
; FLAM_HCLAP		equ		60
; FLAM_CHIHAT		equ		62
; FLAM_OHIHAT		equ		64
; FLAM_CRASH		equ		66
; FLAM_RIDE			equ		68
; invidual instrument track lenghts
;  packed in msb and lsb nybbles
PAT_LENGTHS			equ		70
; LEN_BDRUMSDRUM	equ		70
; LEN_LTOMMTOM		equ		71
; LEN_HTOMRSHOT		equ		72
; LEN_HCLAPCHIHAT	equ		73
; LEN_OHIHATCRASH	equ		74
; LEN_RIDEACCENT	equ		75

PATTERN_HALF_SIZE	equ		76
PATTERN_SIZE_FLASH	equ		164		; 12 + 76 + 76

; pattern scales
SCALE_16			equ		0	; 1/16th notes
SCALE_32			equ		1	; 1/32th notes
SCALE_8TR			equ		2	; 1/8th triplets
SCALE_16TR			equ		3	; 1/16th triplets

SCALE_16_TICKS		equ		12
SCALE_32_TICKS		equ		6
SCALE_8TR_TICKS		equ		16
SCALE_16TR_TICKS	equ		8

; instruments
INSTR_BASSDRUM		equ		0
INSTR_ACCENT		equ		11

; app event bits
EVENT_KEY			equ		0	; normal keypress
EVENT_TEMPOCHANGE	equ		1	; tempo changed
EVENT_DIRTY			equ		2	; pattern has changed and
								;  should be flashed
EVENT_LASTSTEP		equ		3	; last step of the pattern
								;  has been reached
EVENT_FLASHREADOK	equ		4	; indicates a flash read has
								;  succeeded
EVENT_DINRUN		equ		5	; din run detected, syncing
								;  to din sync
EVENT_MIDIRUN		equ		6	; midi run detected, syncing
								;  to midi sync
EVENT_SYSEX			equ		7	; sysex procedure

; app mode bits
;
; note: SETTINGS mode equals no bits set!
MODE_PPLAY			equ		0	; pattern play mode
MODE_PWRITE			equ		1	; pattern write mode
MODE_TPLAY			equ		2	; track play mode
MODE_TWRITE			equ		3	; track write mode
MODE_RUN			equ		4	; sequencer running
MODE_FILL			equ		5	; fill pattern active
MODE_CHAIN			equ		6	; chain play active
MODE_FLAMWRITE		equ		7	; flam write mode
;MODE_SETTINGS		equ		...	; settings mode


; sysex mode bits
SYSEX_ERROR			equ		0	; sysex error detected
SYSEX_MEMDUMP		equ		1	; sysex memory dump in progress

; pattern banks
BANK_A				equ		0
BANK_B				equ		1
BANK_C				equ		2
BANK_D				equ		3

; led to reg mappings
; note: utility.inc/get_ledreg hardcoded, do not change.
LEDREG_S1			equ		leds_busa_1
LEDREG_S2			equ		leds_busa_1
LEDREG_S3			equ		leds_busa_1
LEDREG_S4			equ		leds_busa_1
LEDREG_S5			equ		leds_busa_1
LEDREG_S6			equ		leds_busa_1
LEDREG_S7			equ		leds_busa_1
LEDREG_S8			equ		leds_busa_1
LEDREG_S9			equ		leds_busa_2
LEDREG_S10			equ		leds_busa_2
LEDREG_S11			equ		leds_busa_2
LEDREG_S12			equ		leds_busa_2
LEDREG_S13			equ		leds_busa_2
LEDREG_S14			equ		leds_busa_2
LEDREG_S15			equ		leds_busa_2
LEDREG_S16			equ		leds_busa_2
LEDREG_BANKA		equ		leds_busb_1
LEDREG_BANKB		equ		leds_busb_1
LEDREG_BANKC		equ		leds_busb_1
LEDREG_BANKD		equ		leds_busb_1
LEDREG_START		equ		leds_busb_1

; led to reg bit mappings
LED_S1				equ		7
LED_S2				equ		6
LED_S3				equ		5
LED_S4				equ		4
LED_S5				equ		3
LED_S6				equ		2
LED_S7				equ		1
LED_S8				equ		0
LED_S9				equ		7
LED_S10				equ		6
LED_S11				equ		5
LED_S12				equ		4
LED_S13				equ		3
LED_S14				equ		2
LED_S15				equ		1
LED_S16				equ		0
LED_BANKA			equ		7
LED_BANKB			equ		6
LED_BANKC			equ		5
LED_BANKD			equ		4
LED_START			equ		3

; key codes
KEY_NONE			equ		0
KEY_S1				equ		1
KEY_S2				equ		2
KEY_S3				equ		3
KEY_S4				equ		4
KEY_S5				equ		5
KEY_S6				equ		6
KEY_S7				equ		7
KEY_S8				equ		8
KEY_S9				equ		9
KEY_S10				equ		10
KEY_S11				equ		11
KEY_S12				equ		12
KEY_S13				equ		13
KEY_S14				equ		14
KEY_S15				equ		15
KEY_S16				equ		16
KEY_BANKA			equ		17
KEY_BANKB			equ		18
KEY_BANKC			equ		19
KEY_BANKD			equ		20
KEY_START			equ		21
KEY_STOPCONT		equ		22
KEY_CLEAR			equ		23		; downkey
KEY_SCALE			equ		24
KEY_LASTSTEP		equ		25		; downkey
KEY_INSTRSEL		equ		26		; downkey
KEY_SHUFFLEFLAM		equ		27		; downkey
KEY_PATTPLAYWRITE	equ		28
KEY_TRACKPLAYWRITE	equ		29
KEY_SHIFTFUNC		equ		30		; downkey
KEY_ENTER			equ		31

; "downkeys", keys that can be held down
;
; Note: LASTSTEP + INSTRSEL are allowed
;        to be held down simultaneously.
;		 22k limiting resistors are 
;		 therefore needed on both
;		 key lines.
DOWNKEY_SHIFTFUNC	equ		0			; bits in variable
DOWNKEY_INSTRSEL	equ		1			;  "downkeys"
DOWNKEY_LASTSTEP	equ		2
DOWNKEY_CLEAR		equ		3
DOWNKEY_SHUFFLEFLAM	equ		4

; trigger mappings
; triggers are stored in vars triggers_a and triggers_b
;
; REG BIT	7	6	5	4	3	2	1	0
; reg a		0	0	cr	hc	ht	r/s	hhs	rd
; reg b		0	0	rs	lt	sd	bd	mt	hh
;
TRIGREG_BASSDRUM	equ		triggers_b	; trigger reg
TRIG_BASSDRUM		equ		2			; trigger bit
FLAMREG_BASSDRUM	equ		flam_b

TRIGREG_SNAREDRUM	equ		triggers_b
TRIG_SNAREDRUM		equ		3
FLAMREG_SNAREDRUM	equ		flam_b

TRIGREG_LOWTOM		equ		triggers_b
TRIG_LOWTOM			equ		4
FLAMREG_LOWTOM		equ		flam_b

TRIGREG_MIDTOM		equ		triggers_b
TRIG_MIDTOM			equ		1
FLAMREG_MIDTOM		equ		flam_b

TRIGREG_HITOM		equ		triggers_a
TRIG_HITOM			equ		3
FLAMREG_HITOM		equ		flam_a

TRIGREG_RIMSHOT		equ		triggers_b
TRIG_RIMSHOT		equ		5
FLAMREG_RIMSHOT		equ		flam_b

TRIGREG_HANDCLAP	equ		triggers_a
TRIG_HANDCLAP		equ		4
FLAMREG_HANDCLAP	equ		flam_a

TRIGREG_HIHATSEL	equ		triggers_a
TRIG_HIHATSEL		equ		1
TRIGREG_HIHAT		equ		triggers_b
TRIG_HIHAT			equ		0
FLAMREG_HIHATSEL	equ		flam_a
FLAMREG_HIHAT		equ		flam_b

TRIGREG_CRASH		equ		triggers_a
TRIG_CRASH			equ		5
FLAMREG_CRASH		equ		flam_a

TRIGREG_RIDE		equ		triggers_a
TRIG_RIDE			equ		0
FLAMREG_RIDE		equ		flam_a

TRIGREG_STARTSTOP	equ		triggers_a
TRIG_STARTSTOP		equ		2

;;; port / pin vars

; led bus port
PORT_LEDBUS			equ		PORTE
LEDBUS_A_PIN		equ		0		; re0
LEDBUS_B_PIN		equ		1		; re1
PAT_DISP_LIT_PIN	equ		2		; re2

; key bus port
PORT_KEYBUS			equ		PORTA
KEYBUS_A_PIN		equ		5		; ra5
KEYBUS_B_PIN		equ		1		; ra1

; pattern display / led mux port
PORT_LEDMUX			equ		PORTD
LAT_LEDMUX			equ		LATD

; lcd display port(s)
PORT_LCD			equ		PORTB
LCD_D4_PIN			equ		0		; rb0
LCD_D5_PIN			equ		1		; rb1
LCD_D6_PIN			equ		2		; rb2
LCD_D7_PIN			equ		3		; rb3
LCD_RS_PIN			equ		4		; rb4
PORT_LCD_EN			equ		PORTA
LCD_EN_PIN			equ		4		; ra4, 
									; 10k pull-up on open drain

; din out (clock pin)
;  run/stop pin is tied to the 9090 muxes
DIN_SYNC_PORT		equ		PORTC
DIN_SYNC_PIN		equ		5		; RC5

; din in run/stop pin
;  clock is tied to RC2 and triggers CCP1IF
DIN_IN_PORT			equ		PORTC
DIN_IN_STARTSTOP_PIN equ	1		

; 9090 specific:
PORT_TRIG			equ		PORTB	; rb0 to rb5
TRIGDAC_CLK_PORT	equ		PORTB
TRIGDAC_CLK_PIN		equ		6		; rb6
TRIGLATCHA_PORT		equ		PORTB
TRIGLATCHA_PIN		equ		7		; rb7
TRIGLATCHB_PORT		equ		PORTA
TRIGLATCHB_PIN		equ		2		; ra2
TRIGMUXINH_PORT		equ		PORTA
TRIGMUXINH_PIN		equ		5		; ra3

SYSEX_TYPE_MEM		equ		0x00
SYSEX_TYPE_PAT		equ		0x01

; (boolean) sequencer setting bits stored
;  in settings variable
SETTING_DIN_IN		equ		7
SETTING_DIN_OUT		equ		6
SETTING_MIDIS_IN	equ		5
SETTING_MIDIS_OUT	equ		4
SETTING_MIDIN_OUT	equ		3
;SETTING_MIDIN_IN	equ		2

MIDI_NOTE_BDRUM		equ		36
MIDI_NOTE_SDRUM		equ		40
MIDI_NOTE_LTOM		equ		43
MIDI_NOTE_MTOM		equ		47
MIDI_NOTE_HTOM		equ		50
MIDI_NOTE_RSHOT		equ		37
MIDI_NOTE_HCLAP		equ		39
MIDI_NOTE_CHIHAT	equ		42
MIDI_NOTE_OHIHAT	equ		46
MIDI_NOTE_CRASH		equ		49
MIDI_NOTE_RIDE		equ		51




External Labels :

	None.