;MP2v003a.ASM by Dick Straker. Programmable selection-of-presets synthesiser module. ;"MIDI Partner" MIDI sound expander for WEM. PIC18F452 controlling ATSAM9773 SOUND SYNTH CHIP. ;MIDI Partner launched in AD2002. ;10MHz crystal osc + PLL (40MHz)gives 100ns single instruction cycle time. Basic ; main program loop time ~40us (Meausured on port RB7). ;................................................................................................................................................................................................................ ;Tab is 16 spaces. Font is Arial bold 10. ;................................................................................................................................................................................................................ ;Version MP2v003a adds direct access to sound-try-out mode from normal play mode using bass bank & rh2 mute buttons ; pressed simultaneously. ;Versions MP2v xx2x : RH1now has 3rd layer on some sounds (RH1-6 Accordion from 3 detuned layers). ; 6 extra buttons now available in hardware. All backwardly compatible with ; original MP1 hardware. 3 drum sounds available on bass and chords. ;Tremolo editing button now latching. ;Variable level 'solo' button added ;Variable pitch-bend function button added. ; ;Version 9A1 : Bass 9 release reduced - left variable. ;Version 9A0 adds : Pressing instrument select buttons again (toggles) mutes/unmutes the instrument. ; ;Version (8A3 - Jan 2007) makes the two Rh mute buttons into Inc & Dec controls for the sound tryout/edit ; mode. This adds to FSW1 & 2 for the same function. Rh1 mute=Dec, Rh2=Inc. ;Version (8A1 - Jan 2007) changes the drums operation to 3 individual on/off/Edit buttons & ; has a general rejig of the software here. ; ;Version (7C0) has been default version from date 27/11/2006 and changes the ; bass/chords percussion instruments in the different drum sets & adds master tune facility. ;Version (7B0) has been default version from date 27/10/2006. ; 7B0 - the last number being different sound versions of the same software version. ;................................................................................................................................................................................................................ ;May be directly programmed into MP1 unit using ICD2 using the following configuration ; bit settings (see config directives below at begining of code section): ;Oscillator = - HS/PLL Enabled. ;Oscillator switch - Disabled. ;Powerup timer - Enabled. ;Brownout detect - Enabled @2.7V. ;Watchdog timer - Disabled. ;Low voltage program - Disabled. ;Background Debug - Disabled. ;Stack overflow reset - Enabled. ;Code memory protects - Enabled. ;Data EE Read protect - Disabled. ; ;EEPROM address 0xC0 will show 1st software revision letter in ASCII. ; (e.g v = 0x76). and address 0xC1 will show 2nd software revision letter in ; ASCII. (e.g. 4 = 0x34).and address 0xC2,C3 will show 3rd, 4th software revision letter. ;See eeprom address chart at the end of this file. ; ;Receives MIDI :- Bass=Ch3, Chords=Ch2, Rh1=Ch1/4, Rh2=Ch4. Rh2 Copies Ch1 unless ; external Ch4 input is sensed. Once sensed stays locked to chan 4 until power reset. ; ;Internally, Ch5 is used for 2nd layer on Rh Ch1 and Ch7 for 3rd layer on Ch1. ;Ch6 is 2nd layer for bass Ch3. ; ;Also, can recieve simultaneously for 'Cavagnolo' compatibility ; Ch16,15,14. (Rh, Bas, Chd), if activated. ; ;4 Assignable Footswitches to all (instrument & mute/octave/select/effects) ; buttons. ; Press & hold pedal whilst pushing desired button, release pedal. ;Pedal assignments are remembered during power off. ;............................................................................................................................ ;Mode changing control sequences : ; ;If RH1 Mute button held down at startup, Sound-try-out or Sound-Programming mode is ; entered. ;From this version (MP2v003a), sound programming mode may be entered during normal use ; by pressing Bass bank and Rh2 Mute buttons together. Pressing again, exits back to normal mode. ;Also now, Mute 1 & 2 leds flash slowly to indicate that you are in programming mode. ;Also Mute 1 & 2 buttons are inc and dec respectively as well as Fsw 1 & 2 being inc and dec through ; the 128 sounds plus a blank between sound 127 and 0 on all 4 parts. ; Press a button to select it, press again to write in. All other controls work ; as normal. If a preset sound button is pressed then the sound is stored at ; this button, the reverb settings are also stored. ;If Rh1 Mute and Rh1-12 button held down at startup as above but MT32 sound-bank ; is used instead of GM bank. Reload factory presets to clear to GM Bank. ; ;To reload factory presets : Hold Chord Bank Button at power up. ; ;If Rh1-1 & Rh1-6 held down at power-on then Right-hand (Chan1) is converted to ; to Chan3 so Rhand plays the bass section. Holding buttons again at power-up ; toggles this mode which is otherwise 'remembered' in eeprom. ; ;If Rh2-1 & 6 held at power on, then 'Cavagnolo' compatibility of receiving ; Righthand on Ch16, Chords on 14 & Bass on 15 is enabled (reverse of previous versions). ; This is stored in EEPROM. Reload factory presets to cancel. ; ;If Rh2 7 & 12 held at power on, ATSAM9773 internal chip test performed, gives 3 ; sine tones out - see section. Useful as module check without MIDI. To exit press Rh2-8 ; & Rh2-11 together or power down/up. ; ;If Mute Rh2 held at power up, unit turns into GM module, no controls, just ; activity Led which blinks with recognised MIDI messages.(Analogue Master Vol ; only works). ; ;In normal operation 2 mutes held together produce alternate Rh1 to Rh2 mode. ; Rh2 mute toggles & Rh1 exits to normal mute modes. ; ;If Bass Bank (Change) button held at power-up, notes only (minimal) mode is ; toggled, where only MIDI note on/off info is responded to. Control change, ; program change etc are rejected. ; ;Percussion on/off if held down more than 1.5s, will turn LH Manual percussion ; on and Bass and Chord bank leds will flash quickly and Bass Fx control will ; set bass percussion volume level while Chord Fx control will set chord ; percussion volume level relative to bass or chord notes.Settings are ; remembered. ; ;Tremolo on/off button if held in more than 1.5s, will turn Rh1 Fx control into ; trem speeed and Rh2 Fx control into trem depth. Tremolo works on Rh1 & 2. ; Settings are remembered. ; ;Auto-repeat function has been removed - was never implemented physically. ; ;This version has a footswitch assignable pitch-bend (down up to a tone) ; effect button. Hold in until bass & chords leds flah for editing. BassFx control is recovery ; time, ChordFx is bend down pitch. Button is used to test amount of effect so hold button in ; again until leds stop flashing to store setting and exit. ; ;3 alternate drum set select buttons. Hold in for editing of bass and chord percussion. ; Each set has volume amounts which are memorized. ; ;Version 7C0+ adds MASTER TUNNING CONTROL. Hold Mute RH2 button in for ; 1.5secs until RH2 Mute Led starts flashing, RH2 Reverb control is now Master Tune ; control (A440 in centre), variable over approx 1/4 tone = +-1/8 tone. Press again to ; cancel. Value is stored in eeprom. ; ;Volume controls use midi Control 07 volume. ;Solo funtion uses control 11 expression [Rh1 & 2 only (chs 1,5,4)] Bass and chords ; use expression function as level correction only. ;Tremolo uses after touch pressure. Amplitude function set by sysx command. ;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- include "p18f452.inc" ; ;Configuration bits:- config OSC = HSPLL ;OSCILLATOR IS HSPLL config OSCS = OFF ;OSCILLATOR SWITCH OFF. config PWRT = ON ;POWERUP TIMER ON. config BOR = ON ;BROWN OUT RESET IS ON. config BORV = 27 ;BROWN OUT VOLTAGE IS 2.7V. config WDT = OFF ;WATCHDOG TIMER IS OFF. config CCP2MUX = OFF ;DISABLE (RB3). config STVR = ON ;STACK OVERFLOW RESET. config LVP = OFF ;LV ICSP. CONFIG DEBUG = OFF ;BACKGROUND DEBUGGER. CONFIG CP0 = ON ;CODE PROTECTION BLOCK 0. CONFIG CP1 = ON ;CODE PROTECTION BLOCK 1. CONFIG CP2 = ON ;CODE PROTECTION BLOCK 2. CONFIG CP3 = ON ;CODE PROTECTION BLOCK 3. CONFIG CPB = ON ;CODE PROTECT BOOT BOOT BLOCK. CONFIG WRT0 = OFF ;WRITE PROTECT BLOCK 0. CONFIG WRT1 = OFF ;WRITE PROTECT BLOCK 1. CONFIG WRT2 = OFF ;WRITE PROTECT BLOCK 2. CONFIG WRT3 = OFF ;WRITE PROTECT BLOCK 3. CONFIG WRTB = OFF ;WRITE PROTECT BOOT BLOCK. CONFIG WRTC = OFF ;CONFIGURATION REGISTER WRITE PROTECT. CONFIG WRTD = OFF ;DATA EEPROM WRITE PROTECT. CONFIG EBTR0 = ON ;TABLE READ PROTECT BLOCK 0. CONFIG EBTR1 = ON ;TABLE READ PROTECT BLOCK 1. CONFIG EBTR2 = ON ;TABLE READ PROTECT BLOCK 2. CONFIG EBTR3 = ON ;TABLE READ PROTECT BLOCK 3. CONFIG EBTRB = ON ;BOOT BLOCK TABLE READ PROTECT. ; ;CONSTANT EQUATES: ; W equ D'0' ;(WREG). F equ D'1' ;(FILE). ;MIDISTAT. MIDI_RTS_FLAG equ D'0' ;IN MIDISTAT. SNDTRY_FLAG equ D'1' ; RS_FLAG equ D'2' ;RUNNING STATUS SET FLAG. DB1_FLAG equ D'3' ;DataByte1 Flag. DB2_FLAG equ D'4' ;DataByte2 Flag SINGLE_FLAG equ D'5' ;Single DataByte Flag. AS_FLAG equ D'6' ; NOSTAT_FLAG equ D'7' ;1st TIME IN STATUS FLAG. ;DISPLAYREG. - HOLDS LED CONDITIONS. MUTE2LED equ D'0' ;RH2 MUTE LED. DISPLAYREG. GREEN equ D'1' ;IN DISPLAY REG. MUTE1LED equ D'2' ;RH1 MUTE LED. DISPLAYREG. MIDI_LED equ D'3' ; CHORDBANK equ D'4' ;CHORD BANK LED. ON = BANK A. BASSBANK equ D'5' ;BASS BANK LED. ON = BANK A. ;MIDISTAT2. CH4LAYER_FLAG equ D'0' ;IN MIDISTAT2. CH6ON_FLAG equ D'1' ;IN MIDISTAT2. CH6MUTE_FLAG equ D'2' ;IN MIDISTAT2. CH4SB_FLAG equ D'3' ;IN MIDISTAT2. DBIGNOR_FLAG equ D'4' ;IN MIDISTAT2. SENDSNG_FLAG equ D'5' ;IN MIDISTAT2. SEND2DB_FLAG equ D'6' ;IN MIDISTAT2. CH5COND_FLAG equ D'7' ;IN MIDISTAT2. ;GENFLAGS1. NORPN_FLAG equ D'0' ;IN GENFLAGS1. BASSOCTBIT equ D'1' ;IN GENFLAGS1. CHORDOCTBIT equ D'2' ;IN GENFLAGS1. RH1OCTBIT equ D'3' ;IN GENFLAGS1. RH2OCTBIT equ D'4' ;IN GENFLAGS1. MUTE_FLAG equ D'5' ;IN GENFLAGS1. MUTE1_FLAG equ D'6' ;IN GENFLAGS1. MUTE2_FLAG equ D'7' ;IN GENFLAGS1. ;GENFLAGS2. FSW1ON_FLAG equ D'0' ;IN GENFLAGS2. FSWON2_FLAG equ D'1' ;IN GENFLAGS2. FSW_FLAG equ D'2' ;IN GENFLAGS2. SNG2_FLAG equ D'3' ;IN GENFLAGS2. DB12_FLAG equ D'4' ;IN GENFLAGS2. DB22_FLAG equ D'5' ;IN GENFLAGS2. CH5ON_FLAG equ D'6' ;IN GENFLAGS2. CH5MUTE_FLAG equ D'7' ;IN GENFLAGS2. ;GENFLAGS3. MUTOG_FLAG equ D'0' ;TOGGLE MUTE RH1 TO RH2. RH224OCTD_BIT equ D'1' ; CH4FIRST_FLAG equ D'2' ;FIRST TIME DETECT CH4 FLAG. PERCON2_BIT equ D'3' ;ENABLE Ch10 PERCUSSION ON Ch2. PERCON3_BIT equ D'4' ;ENABLE Ch10 PERCUSSION ON Ch3. ;PRTA_EN_BIT equ D'5' ;PORTAMENTO ENABLE. DRM1_BIT equ D'6' ;PERCUSSION ON/OFF (FROM FSW4). PERCVOLED_BIT equ D'7' ;PERCUSSION EDIT FLAG. ;GENFLAGS4. ;REPEATEN_BIT equ D'0' ;AUTO REPEAT ON/OFF. CHANCONV_BIT equ D'1' ;Channel convert for other systems. BLANK_RH1_FLAG equ D'2' ;PROGRAM A BLANK FLAG RH1. BLANK_RH2_FLAG equ D'3' ;PROGRAM A BLANK FLAG RH2. BASVEL0_FLAG equ D'4' ; CHDVEL0_FLAG equ D'5' ; ;DRMBWAIT_BIT equ D'6' ; BASS_RNG_BIT equ D'7' ; ;GENFLAGS5. EDBASBIT equ D'0' ;CONTROLS FOR TEST SOUND EDIT MODE. EDCHDBIT equ D'1' ;CONTROLS FOR TEST SOUND EDIT MODE. EDRH1BIT equ D'2' ;CONTROLS FOR TEST SOUND EDIT MODE. EDRH2BIT equ D'3' ;CONTROLS FOR TEST SOUND EDIT MODE. RH1OCTUPBIT equ D'4' ;RH1 OCTAVE UP. PORTA_BIT equ D'5' ;PORTAMENTO ON/OFF. ;TREMWAIT_BIT equ D'6' ;WAIT TIME FOR PORTAM TO BE ON. ;TREMSPDED_BIT equ D'7' ;PORTAMENTO ON TIME FLAG. ;GENFLAGS6. ;TREMONCEBIT equ D'0' ;SEND TREMELO ON ONCE ONLY. RPT2_INPROG equ D'1' ;REPEAT Ch4 NOTE1 ON ;TREMVOLED_BIT equ D'2' ;READY TO START REPEAT. ;TREMON_BIT equ D'3' ;TREMELO ON/OFF. SYSX11_B7_FLG equ D'4' ;SYSX 11, BYTE 7 FLAG. RHINSTCHNG equ D'5' ;RH INSTRUMENT BUTTON CHANGE. NOTESONLY equ D'6' ;NOTES ONLY BIT. ;RPT1_INPROG equ D'7' ;REPEAT1 IN PROGRESS BIT. ;GENFLAGS7. TREMVOLED_BIT equ D'0' ;TREMOLO EDIT ROUTINE. TREMTOG_FLAG equ D'1' ;TREMOLO EDIT ROUTINE. TREMWAIT_BIT equ D'2' ;TREMOLO EDIT ROUTINE. ;TREMSPDED_BIT equ D'3' ;TREMOLO EDIT ROUTINE. ;TREMONCEBIT equ D'4' ;TREMOLO EDIT ROUTINE. TREMON_BIT equ D'5' ;TREMOLO EDIT ROUTINE. ;GENFLAGS8. RH1L3EN equ D'0' ;RH1 LAYER 3 ENABLE. PB_EN_BIT equ D'1' ;PRESET PITCH-BEND ENABLE. PBHOLD_BIT equ D'3' ;PB BUTTON HOLD DOWN. DRM2_BIT equ D'4' ;DRUMSET 2 SELECT BIT. DRM3_BIT equ D'5' ;DRUMSET 3 SELECT BIT. CHAN1TO3_BIT equ D'6' ;RH1 CONVERT TO BASS CH3. CANCEL1TO3_BIT equ D'7' ;RH1 CONVERT TO BASS CH3 CANCEL. ;GENFLAGS9. MTUNED_FLAG equ D'0' ;MASTER TUNE MODE SET FLAG. MTWAIT_BIT equ D'1' ;MASTER TUNE MTTOG_FLAG equ D'2' ;MASTER TUNE DRM1WAIT_BIT equ D'3' ; DRM1TOG_FLAG equ D'4' ; DRM3TOG_FLAG equ D'5' ; DRM2WAIT_BIT equ D'6' ; DRM2TOG_FLAG equ D'7' ; ;GENFLAGS10. DRM3WAIT_BIT equ D'0' ;DRUMS3 EDITS. DIP_CHNG_LED equ D'1' ; MIDI_LED_FLAG equ D'2' ; STM_MUTDEC_FLAG equ D'3' ;SOUNDTRYOUT MODE FLAG FOR MUTE BUTTON. STM_MUTINC_FLAG equ D'4' ;SOUNDTRYOUT MODE FLAG FOR MUTE BUTTON. TREMHOLD_FLAG equ D'5' ;A TREMOLO ROUTINE FLAG. ;GENFLAGS11. SOLOTOG_FLAG equ D'0' ;SOLO ROUTINE BITS. SOLO_BIT equ D'1' ; SOLOWAIT_BIT equ D'2' ; SOLOVOLED_BIT equ D'3' ; SOLOSTAT_BIT equ D'4' ; ;GENFLAGS12 BENDVOLED_BIT equ D'0' ;BEND EDIT MODE IS NOW OFF. BENDTOG_FLAG equ D'1' ;FIRST TIME IN FLAG. BENDWAIT_BIT equ D'2' ;SET EDIT MODE OFF. BENDTERM_BIT equ D'3' ;BEND EDIT EXIT. ;FSW1ASIGNREG FSW1_MRH2_BIT equ D'0' ;IN FSW1ASIGNREG FSW1_ORH2_BIT equ D'1' ;IN FSW1ASIGNREG FSW1_MRH1_BIT equ D'2' ;IN FSW1ASIGNREG FSW1_ORH1_BIT equ D'3' ;IN FSW1ASIGNREG FSW1_OCHD_BIT equ D'4' ;IN FSW1ASIGNREG FSW1_OBAS_BIT equ D'5' ;IN FSW1ASIGNREG ; FSW2_MRH2_BIT equ D'0' ;IN FSW2ASIGNREG FSW2_ORH2_BIT equ D'1' ;IN FSW2ASIGNREG FSW2_MRH1_BIT equ D'2' ;IN FSW2ASIGNREG FSW2_ORH1_BIT equ D'3' ;IN FSW2ASIGNREG FSW2_OCHD_BIT equ D'4' ;IN FSW2ASIGNREG FSW2_OBAS_BIT equ D'5' ;IN FSW2ASIGNREG ; FSW3_MRH2_BIT equ D'0' ;IN FSW3ASIGNREG FSW3_ORH2_BIT equ D'1' ;IN FSW3ASIGNREG FSW3_MRH1_BIT equ D'2' ;IN FSW3ASIGNREG FSW3_ORH1_BIT equ D'3' ;IN FSW3ASIGNREG FSW3_OCHD_BIT equ D'4' ;IN FSW3ASIGNREG FSW3_OBAS_BIT equ D'5' ;IN FSW3ASIGNREG ; FSW4_MRH2_BIT equ D'0' ;IN FSW4ASIGNREG FSW4_ORH2_BIT equ D'1' ;IN FSW4ASIGNREG FSW4_MRH1_BIT equ D'2' ;IN FSW4ASIGNREG FSW4_ORH1_BIT equ D'3' ;IN FSW4ASIGNREG FSW4_OCHD_BIT equ D'4' ;IN FSW4ASIGNREG FSW4_OBAS_BIT equ D'5' ;IN FSW4ASIGNREG ; FSW1_BAS1_BIT equ D'0' ;IN FSW1ASIGNREGBA FSW1_BAS2_BIT equ D'1' ;IN FSW1ASIGNREGBA FSW1_BAS3_BIT equ D'2' ;IN FSW1ASIGNREGBA FSW1_BAS4_BIT equ D'3' ;IN FSW1ASIGNREGBA FSW1_BAS5_BIT equ D'4' ;IN FSW1ASIGNREGBA FSW1_BAS6_BIT equ D'5' ;IN FSW1ASIGNREGBA FSW1_BAS8_BIT equ D'6' ;IN FSW1ASIGNREGBA ; FSW1_CHD1_BIT equ D'0' ;IN FSW1ASIGNREGCH FSW1_CHD2_BIT equ D'1' ;IN FSW1ASIGNREGCH FSW1_CHD3_BIT equ D'2' ;IN FSW1ASIGNREGCH FSW1_CHD4_BIT equ D'3' ;IN FSW1ASIGNREGCH FSW1_CHD5_BIT equ D'4' ;IN FSW1ASIGNREGCH FSW1_CHD6_BIT equ D'5' ;IN FSW1ASIGNREGCH FSW1_CHD8_BIT equ D'6' ;IN FSW1ASIGNREGCH ; FSW1_RH111_BIT equ D'0' ;IN FSW1ASIGNREG11 FSW1_RH112_BIT equ D'1' ;IN FSW1ASIGNREG11 FSW1_RH113_BIT equ D'2' ;IN FSW1ASIGNREG11 FSW1_RH114_BIT equ D'3' ;IN FSW1ASIGNREG11 FSW1_RH115_BIT equ D'4' ;IN FSW1ASIGNREG11 FSW1_RH116_BIT equ D'5' ;IN FSW1ASIGNREG11 FSW1_RH118_BIT equ D'6' ;IN FSW1ASIGNREG11 ; FSW1_RH121_BIT equ D'0' ;IN FSW1ASIGNREG12 FSW1_RH122_BIT equ D'1' ;IN FSW1ASIGNREG12 FSW1_RH123_BIT equ D'2' ;IN FSW1ASIGNREG12 FSW1_RH124_BIT equ D'3' ;IN FSW1ASIGNREG12 FSW1_RH125_BIT equ D'4' ;IN FSW1ASIGNREG12 FSW1_RH126_BIT equ D'5' ;IN FSW1ASIGNREG12 FSW1_RH128_BIT equ D'6' ;IN FSW1ASIGNREG12 ; FSW1_RH211_BIT equ D'0' ;IN FSW1ASIGNREG21 FSW1_RH212_BIT equ D'1' ;IN FSW1ASIGNREG21 FSW1_RH213_BIT equ D'2' ;IN FSW1ASIGNREG21 FSW1_RH214_BIT equ D'3' ;IN FSW1ASIGNREG21 FSW1_RH215_BIT equ D'4' ;IN FSW1ASIGNREG21 FSW1_RH216_BIT equ D'5' ;IN FSW1ASIGNREG21 FSW1_RH218_BIT equ D'6' ;IN FSW1ASIGNREG21 ; FSW1_RH221_BIT equ D'0' ;IN FSW1ASIGNREG22 FSW1_RH222_BIT equ D'1' ;IN FSW1ASIGNREG22 FSW1_RH223_BIT equ D'2' ;IN FSW1ASIGNREG22 FSW1_RH224_BIT equ D'3' ;IN FSW1ASIGNREG22 FSW1_RH225_BIT equ D'4' ;IN FSW1ASIGNREG22 FSW1_RH226_BIT equ D'5' ;IN FSW1ASIGNREG22 FSW1_RH227_BIT equ D'6' ;IN FSW1ASIGNREG22 ; FSW2_BAS1_BIT equ D'0' ;IN FSW2ASIGNREGBA FSW2_BAS2_BIT equ D'1' ;IN FSW2ASIGNREGBA FSW2_BAS3_BIT equ D'2' ;IN FSW2ASIGNREGBA FSW2_BAS4_BIT equ D'3' ;IN FSW2ASIGNREGBA FSW2_BAS5_BIT equ D'4' ;IN FSW2ASIGNREGBA FSW2_BAS6_BIT equ D'5' ;IN FSW2ASIGNREGBA FSW2_BAS8_BIT equ D'6' ;IN FSW2ASIGNREGBA ; FSW2_CHD1_BIT equ D'0' ;IN FSW2ASIGNREGCH FSW2_CHD2_BIT equ D'1' ;IN FSW2ASIGNREGCH FSW2_CHD3_BIT equ D'2' ;IN FSW2ASIGNREGCH FSW2_CHD4_BIT equ D'3' ;IN FSW2ASIGNREGCH FSW2_CHD5_BIT equ D'4' ;IN FSW2ASIGNREGCH FSW2_CHD6_BIT equ D'5' ;IN FSW2ASIGNREGCH FSW2_CHD8_BIT equ D'6' ;IN FSW2ASIGNREGCH ; FSW2_RH111_BIT equ D'0' ;IN FSW2ASIGNREG11 FSW2_RH112_BIT equ D'1' ;IN FSW2ASIGNREG11 FSW2_RH113_BIT equ D'2' ;IN FSW2ASIGNREG11 FSW2_RH114_BIT equ D'3' ;IN FSW2ASIGNREG11 FSW2_RH115_BIT equ D'4' ;IN FSW2ASIGNREG11 FSW2_RH116_BIT equ D'5' ;IN FSW2ASIGNREG11 FSW2_RH118_BIT equ D'6' ;IN FSW2ASIGNREG11 ; FSW2_RH121_BIT equ D'0' ;IN FSW2ASIGNREG12 FSW2_RH122_BIT equ D'1' ;IN FSW2ASIGNREG12 FSW2_RH123_BIT equ D'2' ;IN FSW2ASIGNREG12 FSW2_RH124_BIT equ D'3' ;IN FSW2ASIGNREG12 FSW2_RH125_BIT equ D'4' ;IN FSW2ASIGNREG12 FSW2_RH126_BIT equ D'5' ;IN FSW2ASIGNREG12 FSW2_RH128_BIT equ D'6' ;IN FSW2ASIGNREG12 ; FSW2_RH211_BIT equ D'0' ;IN FSW2ASIGNREG21 FSW2_RH212_BIT equ D'1' ;IN FSW2ASIGNREG21 FSW2_RH213_BIT equ D'2' ;IN FSW2ASIGNREG21 FSW2_RH214_BIT equ D'3' ;IN FSW2ASIGNREG21 FSW2_RH215_BIT equ D'4' ;IN FSW2ASIGNREG21 FSW2_RH216_BIT equ D'5' ;IN FSW2ASIGNREG21 FSW2_RH218_BIT equ D'6' ;IN FSW2ASIGNREG21 ; FSW2_RH221_BIT equ D'0' ;IN FSW2ASIGNREG22 FSW2_RH222_BIT equ D'1' ;IN FSW2ASIGNREG22 FSW2_RH223_BIT equ D'2' ;IN FSW2ASIGNREG22 FSW2_RH224_BIT equ D'3' ;IN FSW2ASIGNREG22 FSW2_RH225_BIT equ D'4' ;IN FSW2ASIGNREG22 FSW2_RH226_BIT equ D'5' ;IN FSW2ASIGNREG22 FSW2_RH227_BIT equ D'6' ;IN FSW2ASIGNREG22 ; FSW3_BAS1_BIT equ D'0' ;IN FSW3ASIGNREGBA FSW3_BAS2_BIT equ D'1' ;IN FSW3ASIGNREGBA FSW3_BAS3_BIT equ D'2' ;IN FSW3ASIGNREGBA FSW3_BAS4_BIT equ D'3' ;IN FSW3ASIGNREGBA FSW3_BAS5_BIT equ D'4' ;IN FSW3ASIGNREGBA FSW3_BAS6_BIT equ D'5' ;IN FSW3ASIGNREGBA FSW3_BAS8_BIT equ D'6' ;IN FSW3ASIGNREGBA ; FSW3_CHD1_BIT equ D'0' ;IN FSW3ASIGNREGCH FSW3_CHD2_BIT equ D'1' ;IN FSW3ASIGNREGCH FSW3_CHD3_BIT equ D'2' ;IN FSW3ASIGNREGCH FSW3_CHD4_BIT equ D'3' ;IN FSW3ASIGNREGCH FSW3_CHD5_BIT equ D'4' ;IN FSW3ASIGNREGCH FSW3_CHD6_BIT equ D'5' ;IN FSW3ASIGNREGCH FSW3_CHD8_BIT equ D'6' ;IN FSW3ASIGNREGCH ; FSW3_RH111_BIT equ D'0' ;IN FSW3ASIGNREG11 FSW3_RH112_BIT equ D'1' ;IN FSW3ASIGNREG11 FSW3_RH113_BIT equ D'2' ;IN FSW3ASIGNREG11 FSW3_RH114_BIT equ D'3' ;IN FSW3ASIGNREG11 FSW3_RH115_BIT equ D'4' ;IN FSW3ASIGNREG11 FSW3_RH116_BIT equ D'5' ;IN FSW3ASIGNREG11 FSW3_RH118_BIT equ D'6' ;IN FSW3ASIGNREG11 ; FSW3_RH121_BIT equ D'0' ;IN FSW3ASIGNREG12 FSW3_RH122_BIT equ D'1' ;IN FSW3ASIGNREG12 FSW3_RH123_BIT equ D'2' ;IN FSW3ASIGNREG12 FSW3_RH124_BIT equ D'3' ;IN FSW3ASIGNREG12 FSW3_RH125_BIT equ D'4' ;IN FSW3ASIGNREG12 FSW3_RH126_BIT equ D'5' ;IN FSW3ASIGNREG12 FSW3_RH128_BIT equ D'6' ;IN FSW3ASIGNREG12 ; FSW3_RH211_BIT equ D'0' ;IN FSW3ASIGNREG21 FSW3_RH212_BIT equ D'1' ;IN FSW3ASIGNREG21 FSW3_RH213_BIT equ D'2' ;IN FSW3ASIGNREG21 FSW3_RH214_BIT equ D'3' ;IN FSW3ASIGNREG21 FSW3_RH215_BIT equ D'4' ;IN FSW3ASIGNREG21 FSW3_RH216_BIT equ D'5' ;IN FSW3ASIGNREG21 FSW3_RH218_BIT equ D'6' ;IN FSW3ASIGNREG21 ; FSW3_RH221_BIT equ D'0' ;IN FSW3ASIGNREG22 FSW3_RH222_BIT equ D'1' ;IN FSW3ASIGNREG22 FSW3_RH223_BIT equ D'2' ;IN FSW3ASIGNREG22 FSW3_RH224_BIT equ D'3' ;IN FSW3ASIGNREG22 FSW3_RH225_BIT equ D'4' ;IN FSW3ASIGNREG22 FSW3_RH226_BIT equ D'5' ;IN FSW3ASIGNREG22 FSW3_RH227_BIT equ D'6' ;IN FSW3ASIGNREG22 ; FSW4_BAS1_BIT equ D'0' ;IN FSW4ASIGNREGBA FSW4_BAS2_BIT equ D'1' ;IN FSW4ASIGNREGBA FSW4_BAS3_BIT equ D'2' ;IN FSW4ASIGNREGBA FSW4_BAS4_BIT equ D'3' ;IN FSW4ASIGNREGBA FSW4_BAS5_BIT equ D'4' ;IN FSW4ASIGNREGBA FSW4_BAS6_BIT equ D'5' ;IN FSW4ASIGNREGBA FSW4_BAS8_BIT equ D'6' ;IN FSW4ASIGNREGBA ; FSW4_CHD1_BIT equ D'0' ;IN FSW4ASIGNREGCH FSW4_CHD2_BIT equ D'1' ;IN FSW4ASIGNREGCH FSW4_CHD3_BIT equ D'2' ;IN FSW4ASIGNREGCH FSW4_CHD4_BIT equ D'3' ;IN FSW4ASIGNREGCH FSW4_CHD5_BIT equ D'4' ;IN FSW4ASIGNREGCH FSW4_CHD6_BIT equ D'5' ;IN FSW4ASIGNREGCH FSW4_CHD8_BIT equ D'6' ;IN FSW4ASIGNREGCH ; FSW4_RH111_BIT equ D'0' ;IN FSW4ASIGNREG11 FSW4_RH112_BIT equ D'1' ;IN FSW4ASIGNREG11 FSW4_RH113_BIT equ D'2' ;IN FSW4ASIGNREG11 FSW4_RH114_BIT equ D'3' ;IN FSW4ASIGNREG11 FSW4_RH115_BIT equ D'4' ;IN FSW4ASIGNREG11 FSW4_RH116_BIT equ D'5' ;IN FSW4ASIGNREG11 FSW4_RH118_BIT equ D'6' ;IN FSW4ASIGNREG11 ; FSW4_RH121_BIT equ D'0' ;IN FSW4ASIGNREG12 FSW4_RH122_BIT equ D'1' ;IN FSW4ASIGNREG12 FSW4_RH123_BIT equ D'2' ;IN FSW4ASIGNREG12 FSW4_RH124_BIT equ D'3' ;IN FSW4ASIGNREG12 FSW4_RH125_BIT equ D'4' ;IN FSW4ASIGNREG12 FSW4_RH126_BIT equ D'5' ;IN FSW4ASIGNREG12 FSW4_RH128_BIT equ D'6' ;IN FSW4ASIGNREG12 ; FSW4_RH211_BIT equ D'0' ;IN FSW4ASIGNREG21 FSW4_RH212_BIT equ D'1' ;IN FSW4ASIGNREG21 FSW4_RH213_BIT equ D'2' ;IN FSW4ASIGNREG21 FSW4_RH214_BIT equ D'3' ;IN FSW4ASIGNREG21 FSW4_RH215_BIT equ D'4' ;IN FSW4ASIGNREG21 FSW4_RH216_BIT equ D'5' ;IN FSW4ASIGNREG21 FSW4_RH218_BIT equ D'6' ;IN FSW4ASIGNREG21 ; FSW4_RH221_BIT equ D'0' ;IN FSW4ASIGNREG22 FSW4_RH222_BIT equ D'1' ;IN FSW4ASIGNREG22 FSW4_RH223_BIT equ D'2' ;IN FSW4ASIGNREG22 FSW4_RH224_BIT equ D'3' ;IN FSW4ASIGNREG22 FSW4_RH225_BIT equ D'4' ;IN FSW4ASIGNREG22 FSW4_RH226_BIT equ D'5' ;IN FSW4ASIGNREG22 FSW4_RH227_BIT equ D'6' ;IN FSW4ASIGNREG22 ;RECFLAGS1. REC_BAS1_BIT equ D'0' ;IN RECFLAGS1. REC_BAS2_BIT equ D'1' ; REC_BAS3_BIT equ D'2' ; REC_BAS4_BIT equ D'3' ; REC_BAS5_BIT equ D'4' ; REC_BAS6_BIT equ D'5' ; ; REC_CHD1_BIT equ D'0' ;;IN RECFLAGS2. REC_CHD2_BIT equ D'1' ; REC_CHD3_BIT equ D'2' ; REC_CHD4_BIT equ D'3' ; REC_CHD5_BIT equ D'4' ; REC_CHD6_BIT equ D'5' ; ; REC_RH11_BIT equ D'0' ;;IN RECFLAGS3. REC_RH12_BIT equ D'1' ; REC_RH13_BIT equ D'2' ; REC_RH14_BIT equ D'3' ; REC_RH15_BIT equ D'4' ; REC_RH16_BIT equ D'5' ; ; REC_RH17_BIT equ D'0' ;;IN RECFLAGS4. REC_RH18_BIT equ D'1' ; REC_RH19_BIT equ D'2' ; REC_RH110_BIT equ D'3' ; REC_RH111_BIT equ D'4' ; REC_RH112_BIT equ D'5' ; ; REC_RH21_BIT equ D'0' ;;IN RECFLAGS5. REC_RH22_BIT equ D'1' ; REC_RH23_BIT equ D'2' ; REC_RH24_BIT equ D'3' ; REC_RH25_BIT equ D'4' ; REC_RH26_BIT equ D'5' ; ; REC_RH27_BIT equ D'0' ;IN RECFLAGS6. REC_RH28_BIT equ D'1' ; REC_RH29_BIT equ D'2' ; REC_RH210_BIT equ D'3' ; REC_RH211_BIT equ D'4' ; REC_RH212_BIT equ D'5' ; ; REC_BAS7_BIT equ D'0' ;IN RECFLAGS7. REC_BAS8_BIT equ D'1' ; REC_BAS9_BIT equ D'2' ; REC_BAS10_BIT equ D'3' ; REC_BAS11_BIT equ D'4' ; REC_BAS12_BIT equ D'5' ; ; REC_CHD7_BIT equ D'0' ;IN RECFLAGS8. REC_CHD8_BIT equ D'1' ; REC_CHD9_BIT equ D'2' ; REC_CHD10_BIT equ D'3' ; REC_CHD11_BIT equ D'4' ; REC_CHD12_BIT equ D'5' ; ; BASS1_FLAG equ D'0' ;BASS 1. BASS2_FLAG equ D'1' ;BASS 2. BASS3_FLAG equ D'2' ;BASS 3. BASS4_FLAG equ D'3' ;BASS 4. BASS5_FLAG equ D'4' ;BASS 5. BASS6_FLAG equ D'5' ;BASS 6. ; CHORD1_FLAG equ D'0' ;CHORD 1. CHORD2_FLAG equ D'1' ;CHORD 2. CHORD3_FLAG equ D'2' ;CHORD 3. CHORD4_FLAG equ D'3' ;CHORD 4. CHORD5_FLAG equ D'4' ;CHORD 5. CHORD6_FLAG equ D'5' ;CHORD 6. ; REC_MBAS1_BIT equ D'0' ;IN RECFLAGS9, REC_MBAS2_BIT equ D'1' ; ('RECORD A BLANK' BITS). REC_MBAS3_BIT equ D'2' ; REC_MBAS4_BIT equ D'3' ; REC_MBAS5_BIT equ D'4' ; REC_MBAS6_BIT equ D'5' ; ; REC_MBAS7_BIT equ D'0' ;IN RECFLAGS10. REC_MBAS8_BIT equ D'1' ; REC_MBAS9_BIT equ D'2' ; REC_MBAS10_BIT equ D'3' ; REC_MBAS11_BIT equ D'4' ; REC_MBAS12_BIT equ D'5' ; ; REC_MCHD1_BIT equ D'0' ;IN RECFLAGS11. REC_MCHD2_BIT equ D'1' ; REC_MCHD3_BIT equ D'2' ; REC_MCHD4_BIT equ D'3' ; REC_MCHD5_BIT equ D'4' ; REC_MCHD6_BIT equ D'5' ; ; REC_MCHD7_BIT equ D'0' ;IN RECFLAGS12. REC_MCHD8_BIT equ D'1' ; REC_MCHD9_BIT equ D'2' ; REC_MCHD10_BIT equ D'3' ; REC_MCHD11_BIT equ D'4' ; REC_MCHD12_BIT equ D'5' ; ; ;....................................................................................................... RAM_ALLOCATION: ; GENTIME1 equ 0x00 ;INCREMENTED BY TIMER0 INTSRV. MIDITEMP1 equ 0x01 ;TEMPORARY HOLD. MIDITEMP2 equ 0x02 ;TEMPORARY HOLD. MIDIBYTCNT equ 0x03 ;MIDI BYTE IN COUNT. LEDFLASH equ 0x04 ; BASSCANHOLD equ 0x05 ; CHORDSCANHOLD equ 0x06 ; RH11TOOCTHOLD equ 0x07 ; RH17TOMUTHOLD equ 0x08 ; RH21TOOCTHOLD equ 0x09 ; RH27TOMUTHOLD equ 0x0A ; PROGCHHOLD1 equ 0x0B ; PROGCHHOLD2 equ 0x0C ; SCANSTAT equ 0x0D ; SCANDEL equ 0x0E ; SCANTEMP1 equ 0x0F ; ; RH11SCANHOLD equ 0x10 ; RH17SCANHOLD equ 0x11 ; RH21SCANHOLD equ 0x12 ; RH27SCANHOLD equ 0x13 ; MIDISTAT equ 0x14 ;MIDI BYTE SORT STATUS. MIDISENDREG equ 0x15 ;MIDI BYTE SEND. DISPLAYREG equ 0x16 ;LED DISPLAY HOLD. MTEMP equ 0x17 ;MIDI FILTER TEMP HOLD. BASSVOLPOT equ 0x18 ;POT VALUE STORE. BASSFXPOT equ 0x19 ;POT VALUE STORE. CHORDVOLPOT equ 0x1A ;POT VALUE STORE. CHORDFXPOT equ 0x1B ;POT VALUE STORE. RH1VOLPOT equ 0x1C ;POT VALUE STORE. RH1FXPOT equ 0x1D ;POT VALUE STORE. RH2VOLPOT equ 0x1E ;POT VALUE STORE. RH2FXPOT equ 0x1F ;POT VALUE STORE. ; POTSTAT equ 0x20 ;POT SEND STATUS. POTSTORE equ 0x21 ;POT VALUE HOLD. POTCHAN equ 0x22 ;POT CHANNEL HOLD. POTSCNCNT equ 0x23 ;POT SCAN LOOP. POTCONT equ 0x24 ;POT CONTROL NUMBER. AS_TIMER equ 0x25 ;ACTIVE SENSING TIMER. TEMP1 equ 0x26 ;HOLDS Ch.6 STATUS-BYTE. MIDISTAT2 equ 0x27 ; NORPN1 equ 0x28 ;Internal N or RPN MIDI CONTROL HOLD. NORPN2 equ 0x29 ;N or RPN MIDI CONTROL HOLD. NORPN3 equ 0x2A ;N or RPN MIDI CONTROL HOLD. NORPN4 equ 0x2B ;N or RPN MIDI CONTROL HOLD. NORPN5 equ 0x2C ;N or RPN MIDI CONTROL HOLD. NORPN6 equ 0x2D ;N or RPN MIDI CONTROL HOLD. NORPN7 equ 0x2E ;N or RPN MIDI CONTROL HOLD. GENFLAGS1 equ 0x2F ; ; CONTCHAN equ 0x30 ;CONTROL SEND HOLDING. CONTDB1 equ 0x31 ;CONTROL SEND HOLDING. CONTDB2 equ 0x32 ;CONTROL SEND HOLDING. GENFLAGS2 equ 0x33 ;GENERAL FLAGS REG 2. AS_COUNT equ 0x34 ;ACTIVE SENSING LOOP COUNTER. SYSX11BYTE9 equ 0x35 ;BYTE 9 OF 11 BYTE SYSX SEND. SYSX11BYTE8 equ 0x36 ;BYTE 8 OF 11 BYTE SYSX SEND. FSWINHOLD equ 0x37 ;FOOTSWITCH SCAN HOLD. MAINSBHOLD equ 0x38 ; MAINDB1HOLD equ 0x39 ; MAINDB2HOLD equ 0x3A ; PEDTEMP equ 0x3B ;FOOTSWITCH SCAN TEMP. CH4SBHOLD equ 0x3C ; GENFLAGS5 equ 0x3D ; CH4DB2HOLD equ 0x3E ; MAINSNGHOLD equ 0x3F ; ; FSW1ASIGNREG equ 0x40 ;FOOTSWITCH1 FUNCTION FLAGS. FSW2ASIGNREG equ 0x41 ;FOOTSWITCH2 FUNCTION FLAGS. FSW3ASIGNREG equ 0x42 ;FOOTSWITCH3 FUNCTION FLAGS. FSW4ASIGNREG equ 0x43 ;FOOTSWITCH4 FUNCTION FLAGS. ; FSW1ASIGNREG22 equ 0x44 ;FOOTSWITCH1 FUNCTION FLAGS. FSW1ASIGNREG21 equ 0x45 ;FOOTSWITCH1 FUNCTION FLAGS. FSW1ASIGNREG12 equ 0x46 ;FOOTSWITCH1 FUNCTION FLAGS. FSW1ASIGNREG11 equ 0x47 ;FOOTSWITCH1 FUNCTION FLAGS. FSW1ASIGNREGCH equ 0x48 ;FOOTSWITCH1 FUNCTION FLAGS. FSW1ASIGNREGBA equ 0x49 ;FOOTSWITCH1 FUNCTION FLAGS. ; FSW2ASIGNREG22 equ 0x4A ;FOOTSWITCH2 FUNCTION FLAGS. FSW2ASIGNREG21 equ 0x4B ;FOOTSWITCH2 FUNCTION FLAGS. FSW2ASIGNREG12 equ 0x4C ;FOOTSWITCH2 FUNCTION FLAGS. FSW2ASIGNREG11 equ 0x4D ;FOOTSWITCH2 FUNCTION FLAGS. FSW2ASIGNREGCH equ 0x4E ;FOOTSWITCH2 FUNCTION FLAGS. FSW2ASIGNREGBA equ 0x4F ;FOOTSWITCH2 FUNCTION FLAGS. ; FSW3ASIGNREG22 equ 0x50 ;FOOTSWITCH3 FUNCTION FLAGS. FSW3ASIGNREG21 equ 0x51 ;FOOTSWITCH3 FUNCTION FLAGS. FSW3ASIGNREG12 equ 0x52 ;FOOTSWITCH3 FUNCTION FLAGS. FSW3ASIGNREG11 equ 0x53 ;FOOTSWITCH3 FUNCTION FLAGS. FSW3ASIGNREGCH equ 0x54 ;FOOTSWITCH3 FUNCTION FLAGS. FSW3ASIGNREGBA equ 0x55 ;FOOTSWITCH3 FUNCTION FLAGS. ; FSW4ASIGNREG22 equ 0x56 ;FOOTSWITCH4 FUNCTION FLAGS. FSW4ASIGNREG21 equ 0x57 ;FOOTSWITCH4 FUNCTION FLAGS. FSW4ASIGNREG12 equ 0x58 ;FOOTSWITCH4 FUNCTION FLAGS. FSW4ASIGNREG11 equ 0x59 ;FOOTSWITCH4 FUNCTION FLAGS. FSW4ASIGNREGCH equ 0x5A ;FOOTSWITCH4 FUNCTION FLAGS. FSW4ASIGNREGBA equ 0x5B ;FOOTSWITCH4 FUNCTION FLAGS. ; NORPNR1 equ 0x5C ;Ext. 7 BYTE NRPN SEND ROUTINE. NORPNR2 equ 0x5D ;Ext. 7 BYTE NRPN SEND ROUTINE. NORPNR3 equ 0x5E ;Ext. 7 BYTE NRPN SEND ROUTINE. NORPNR4 equ 0x5F ;Ext. 7 BYTE NRPN SEND ROUTINE. NORPNR5 equ 0x60 ;Ext. 7 BYTE NRPN SEND ROUTINE. NORPNR6 equ 0x61 ;Ext. 7 BYTE NRPN SEND ROUTINE. NORPNR7 equ 0x62 ;Ext. 7 BYTE NRPN SEND ROUTINE. ; GENFLAGS3 equ 0x63 ;GENERAL FLAGS REGISTER. TEMP2 equ 0x64 ; ; RECFLAGS1 equ 0x65 ;BASS A EEPROM RECORD FLAGS. RECFLAGS2 equ 0x66 ;CHORD A EEPROM RECORD FLAGS. RECFLAGS3 equ 0x67 ;RH1 EEPROM RECORD FLAGS. RECFLAGS4 equ 0x68 ;RH1 EEPROM RECORD FLAGS. RECFLAGS5 equ 0x69 ;RH2 EEPROM RECORD FLAGS. RECFLAGS6 equ 0x6A ;RH2 EEPROM RECORD FLAGS. RECFLAGS7 equ 0x6B ;BASS B EEPROM RECORD FLAGS. RECFLAGS8 equ 0x6C ;CHORD B EEPROM RECORD FLAGS. ; BYTE1OF3 equ 0x6D ; BYTE2OF3 equ 0x6E ; BYTE3OF3 equ 0x6F ; TEMPHOLD equ 0x70 ; PORTATIMEH equ 0x71 ; SNDTRI equ 0x72 ; ; BASS_FLAGS equ 0x73 ;Shows which bass button active. CHORD_FLAGS equ 0x74 ;Shows which chord button active. CHORUSENDLEV equ 0x75 ;CHORUS SEND LEVEL HOLD. PERCON2TIME equ 0x76 ; PERCON3TIME equ 0x77 ; B1_PERCVOL equ 0x78 ;PERCUSSION VOL LEVEL HOLD. ;FSW4ONTIME equ 0x79 ;FSW4 HOLD-ON TIMER. GENFLAGS4 equ 0x7A ;VARIOUS FLAGS. ;FSW4FLASH equ 0x7B ; ;FSW4ONTIMEA equ 0x7C ;FSW4 HOLD-ON TIMER UNITS. ; EMFLASHTIME equ 0x7D ;EDITMODE LED FLASH TIMER. GENFLAGS12 equ 0x7E ;BEND EDIT FLAGS. ;PRTAONTIMEA equ 0x7F ;TREM HOLD-ON TIMER UNITS. ; GENFLAGS6 equ 0x80 ;GENERAL FLAGS REG 6. LEVEL_ADJ_CH1 equ 0x81 ;INSTRUMENT LEVEL BALANCE CH1. TREMSPEED equ 0x82 ;TREMELO SPEED VALUE HOLD. SYSX11BYTE7 equ 0x83 ;BYTE 7 OF 11 BYTE SYSX SEND. TREMDEPTH equ 0x84 ;TREMELO DEPTH VALUE HOLD. LEVEL_ADJ_CH4 equ 0x85 ;INSTRUMENT LEVEL BALANCE CH4. LEVEL_ADJ_CH5 equ 0x86 ;INSTRUMENT LEVEL BALANCE CH5. T0INTWHOLD equ 0x87 ; T0INTSTATHOLD equ 0x88 ; RH11_OFF_FLAGS equ 0x89 ; RH21_ON_FLAGS equ 0x8A ; RH11ONOFF_FLAGS equ 0x8B ; GENFLAGS7 equ 0x8C ;GENERAL FLAGS REG 7. RH12ONOFF_FLAGS equ 0x8D ; RH21ONOFF_FLAGS equ 0x8E ; RH22ONOFF_FLAGS equ 0x8F ; TEMPS equ 0x90 ; RH21_OFF_FLAGS equ 0x91 ;TREMOLO GENFLAGS8 equ 0x92 ;GENERAL FLAGS REG 8. MRPT01SB11 equ 0x93 ; MRPT01DB11 equ 0x94 ; MRPT01DB21 equ 0x95 ; MRPT01SB12 equ 0x96 ; MRPT01DB12 equ 0x97 ; MRPT01DB22 equ 0x98 ; ;PB_TIME equ 0x99 ;PITCH-BEND TIMER. ;PB_COUNT equ 0x9A ;PITCH-BEND TIME. PB_DEPTH_HI equ 0x9B ;PITCH-BEND DEPTH. MSDs PB_DEC_LO equ 0x9C ;PITCH-BEND DEC VALUE. PBTIMEHOLD equ 0x9D ;PBEND. PB_DEPTH_LO equ 0x9E ;PITCH-BEND DEPTH. LSDs PB_DEC_HI equ 0x9F ;PITCH-BEND DEC VALUE. C1_PERCVOL equ 0xA0 ;CHORDS PERCUSSION VOL LEVEL HOLD. CH2DB2HOLD equ 0xA1 ;CHAN 2 DATA BYTE 2 HOLD. CH3DB2HOLD equ 0xA2 ;CHAN 3 DATA BYTE 2 HOLD. GENFLAGS9 equ 0xA3 ;GENERAL FLAGS REGISTER 9. MTUNDAT1 equ 0xA4 ;MASTER TUNE DATA 1. MTUNDAT2 equ 0xA5 ;MASTER TUNE DATA 2. MTUNDAT3 equ 0xA6 ;MASTER TUNE DATA 3. MTUNDAT4 equ 0xA7 ;MASTER TUNE DATA 4. MTUNEDTIME equ 0xA8 ;MASTER TUNE BUTTON TIME. MTUNEDTIMEA equ 0xA9 ;MASTER TUNE BUTTON TIME. MTUNESCAN_HOLD equ 0xAA ;MASTER TUNE SELECT BUTTON. MTUNCTRL_HOLD equ 0xAB ;MASTER TUNE CONTROL VALUE HOLD. MTUNFLASH equ 0xAC ;MASTER TUNE LED FLASH RATE HOLD. DRM1SCAN_HOLD equ 0xAD ;DRUM1 VOL EDIT. DRM2SCAN_HOLD equ 0xAE ;DRUM2 VOL EDIT. DRM3SCAN_HOLD equ 0xAF ;DRUM3 VOL EDIT DRMEDTIME equ 0xB0 ;DRUM1 VOL EDIT. GENFLAGS10 equ 0xB1 ;GENERAL FLAGS REG. DRM1EDTIME equ 0xB2 ;DRUMS1 HOLD IN BUTTON TIME. POT8FILT equ 0xB3 ;POT7 INPUT FILTER. POT7FILT equ 0xB4 ;POT6 INPUT FILTER. DRM1EDTIMEA equ 0xB5 ;DRUMS1 HOLD IN BUTTON TIME. POT6FILT equ 0xB6 ;POT4 INPUT FILTER. POT5FILT equ 0xB7 ;POT2 INPUT FILTER. C2_PERCVOL equ 0xB8 ;CHORDS2 PERCUSSION VOL LEVEL HOLD. C3_PERCVOL equ 0xB9 ;CHORDS3 PERCUSSION VOL LEVEL HOLD. B2_PERCVOL equ 0xBA ;BASS2 PERCUSSION VOL LEVEL HOLD. B3_PERCVOL equ 0xBB ;BASS3 PERCUSSION VOL LEVEL HOLD. BASS_ON_FLAGS equ 0xBC ; BASS_OFF_FLAGS equ 0xBD ; CHORD_ON_FLAGS equ 0xBE ; CHORD_OFF_FLAGS equ 0xBF ; RH22_ON_FLAGS equ 0xC0 ; RH22_OFF_FLAGS equ 0xC1 ; POT4FILT equ 0xC2 ;POT7 INPUT FILTER. POT3FILT equ 0xC3 ;POT6 INPUT FILTER POT2FILT equ 0xC4 ;POT7 INPUT FILTER. POT1FILT equ 0xC5 ;POT6 INPUT FILTER MIDILEDFLASH equ 0xC6 ; GENFLAGS11 equ 0xC7 ;GENERAL FLAGS REG. SOLOVAL equ 0xC8 ;SOLO LEVEL VALUE. RH12_OFF_FLAGS equ 0xC9 ; RH12_ON_FLAGS equ 0xCA ; SOLOONTIME equ 0xCB ;SOLO ROUTINE TIMERS. SOLOONTIMEA equ 0xCC ;SOLO ROUTINE TIMERS. SOLOVALPOT equ 0xCD ;SOLO ROUTINE BENDVALPOT equ 0xCE ;HOLDS BEND AMOUNT. BENDTIMPOT equ 0xCF ;HOLDS BEND TIME. RH12SCANHOLD equ 0xD0 ; RH11_ON_FLAGS equ 0xD1 ; LEVEL_ADJ_CH7 equ 0xD2 ;RH1 3rd LAYER. PBBUTTIME equ 0xD3 ;BEND BUTTON TIMER. PBBUTTIMEA equ 0xD4 ;BEND BUTTON TIMER MULTIPLIER. ; ;0x200 -> 0x2FF IS MIDI-DATA-IN BUFFER. (0X2F4 -> 0x2FF USED BY ICD2 DEBUGGER, ; IGNORED AS BUFFER WILL NOT NORMALLY FILL UP THIS FAR - BUT BEWARE IF USING DEBUGGER.) ;............................................................................................................................................................................................................... org 0x0000 ;RESET POSITION. BRA STARTUP ; ;....................................................................... org 0x0008 ;LO PRIORITY INTERRUPTS POSITION. BTFSC PIR1, RCIF ;WAS INT INITIATED BY USART Rcv ? GOTO USARTRCVINTSRV ;YES. BTFSC INTCON, TMR0IF ;WAS INT INITIATED BY TIMER0 ? GOTO TIMER0INTSRV ;YES. ; BRA STARTUP ;ERROR ! - AS NO OTHER INTS SET. ;....................................................................... org 0x0018 BRA STARTUP ;HI PRIORITY INTERRUPTS POSITION. ;----------------------------------------------------------------------- STARTUP: ; BSF RCON, POR ;POWER-ON RESET STATUS BIT. BSF RCON, BOR ;RESET BROWN-OUT STATUS BIT. ; CLRF LATA ; CLRF LATB ; CLRF LATC ;~RESET FOR AUDIO SYNTH (RC4) IS LO. CLRF LATD ; CLRF LATE ; ; MOVLW 0x3F ;RA6 & 7 SET AS OUTPUT. MOVWF TRISA ; ; MOVLW 0x40 ;ALL SET AS ANALOGUE INPUTS. Fosc/16. MOVWF ADCON1 ;LEFT JUSTIFIED A/D O/P. MOVLW B'10110001' ;AD on. Fosc/64. AN6 = BASS VOL. MOVWF ADCON0 ; ; MOVLW 0x00 ;RB0->7 SET AS OUTPUTS. MOVWF TRISB ; ; MOVLW 0xE7 ;RC0,1,2,5,6,7 SET AS INPUTS. MOVWF TRISC ; ; MOVLW 0xFF ;RD0->7 SET AS INPUTS. MOVWF TRISD ; (0x7F FOR RD7 AS O/P). ; MOVLW 0x07 ;RE0,1,2 SET AS (ANALOGUE) INPUTS. MOVWF TRISE ; ;..................................................................... CLEAR_ALL_RAM: ; LFSR 0, 0x000 ;BANK 0. CLEARLOOP1: ; CLRF POSTINC0 ; BTFSS FSR0H, 0 ;FSR0 = FSR0H + FSR0L (8BITS EACH). BRA CLEARLOOP1 ; (12 BITS USED IN TOTAL). ;................................................................... MOVLW 0xB1 ;2ms INTERRUPT TIME. MOVWF TMR0H ; MOVLW 0xE0 ;2ms INTERRUPT TIME. MOVWF TMR0L ; ; MOVLW 0x88 ;ENABLE TIMER0 AS 16 BIT. MOVWF T0CON ; NO PRESCALER. ; MOVLW 0xA0 ;ENABLE TMR0 OVERFLOW INTERRUPT. MOVWF INTCON ;E0 BCF INTCON2, TMR0IP ;TIMER0 LOW PRIORITY INT. ;....................................................................... SYNTHRESET2: ; ;BCF PORTC, 4 ;~RESET(RC4) IS ALREADY LOW. CLRF DISPLAYREG ; BSF DISPLAYREG, MIDI_LED ; MOVLW 0x08 ; MOVWF PORTB ;SEND 1 TO RB3, SETS LED TO MIDI_LED. BCF PORTC, 3 ;SEND 0 TO RC3, ENABLE LED COMMON. ; MOVLW 0xFF ;>128ms. LONGISH DELAY TO KEEP SWITCH ON NOISES APART. MOVWF GENTIME1 ; SYNRSWAIT: ;WAIT PERIOD FOR ~RESET. TSTFSZ GENTIME1 ; BRA SYNRSWAIT ; BSF PORTC, 4 ;~RESET(RC4) IS HI (I.E. RUN). ISRUNSET: ;WAIT FOR SYNTH-RUNNING SIGNAL. ; (ATSAM9733 OUTPUT FLAG). BTFSS PORTC, 5 ;IS RUN SET (YES->SYNTH IS READY). BRA ISRUNSET ;NO, WAIT FOR RUN SIGNAL FROM SYNTH. ;....................................................................... MOVLW 0x80 ;MORE THAN 128ms SYNTH CHIP SETTLING TIME. MOVWF GENTIME1 ;THIS IS SYNTH SETTLING DELAY WAIT SYNRSWAIT2: ; PERIOD FOR BEFORE SENDING DATA. TSTFSZ GENTIME1 ; BRA SYNRSWAIT2 ; BSF PORTB, GREEN ;SEND 1 TO RB4, SETS LED TO GREEN. BSF GENFLAGS10, DIP_CHNG_LED ;SEND 1 TO RB4, SETS LED TO GREEN. ;....................................................................... USARTSETUP: ; MOVLW D'19' ;USART. FOR 31.25KBaud.(04). MOVWF SPBRG ;BAUDRATE GEN VALUE. BCF TXSTA, BRGH ;Select LOW baud rate ; BSF RCSTA, CREN ;CONTINUOUS RECEIVE ENABLE. BSF RCSTA, SPEN ;SERIAL PORT ENABLE. ; BCF PIR1, RCIF ;Clear RCIF Interrupt Flag BSF PIE1, RCIE ;Set RCIE Interrupt Enable ;.................................... LFSR 1, 0x200 ;MOVE START OF BANK TO FSR1. LFSR 2, 0x200 ;MOVE START OF BANK TO FSR2. ;.................................... MOVF RCREG, W ;CLEAR RCIF. BSF PIR1, TXIF ;TXIF BSF INTCON, PEIE ;Enable peripheral interrupts. BSF TXSTA, TXEN ; BASIC_SETUP_COMPLETE: ; ;======================================================================================================== SRTCONT1: ;START - REGISTER SETUPS. MOVLW 0x08 ; MOVWF POTSCNCNT ; ; CLRF BASSVOLPOT ; CLRF BASSFXPOT ; CLRF CHORDVOLPOT ; CLRF CHORDFXPOT ; CLRF RH1VOLPOT ; CLRF RH1FXPOT ; CLRF RH2VOLPOT ; CLRF RH2FXPOT ; ; CLRF MIDISTAT ;MIDI BYTE SORT, FLAG REG. CLRF MIDISTAT2 ;MIDI BYTE SORT, FLAG REG. CLRF GENFLAGS1 ;MIDI BYTE SORT, FLAG REG. CLRF GENFLAGS2 ;MIDI BYTE SORT, FLAG REG. CLRF GENFLAGS3 ;GENERAL FLAGS REG 3. CLRF GENFLAGS4 ;GENERAL FLAGS REG 4. CLRF GENFLAGS5 ;GENERAL FLAGS REG 5. CLRF GENFLAGS6 ;GENERAL FLAGS REG 6. CLRF GENFLAGS7 ;GENERAL FLAGS REG 7. CLRF GENFLAGS8 ;GENERAL FLAGS REG 8. CLRF GENFLAGS9 ;GENERAL FLAGS REG 9. CLRF GENFLAGS10 ;GENERAL FLAGS REG 10. CLRF GENFLAGS11 ;GENERAL FLAGS REG 11. CLRF GENFLAGS12 ;GENERAL FLAGS REG 12. CLRF MIDIBYTCNT ;MIDI BUFFER BYTE COUNTER. CLRF SCANDEL ;COUNTER. CLRF BASSCANHOLD ;BASS SCAN HOLD. CLRF CHORDSCANHOLD ;CHORDS SCAN HOLD. CLRF RH11SCANHOLD ; CLRF RH17SCANHOLD ; CLRF RH21SCANHOLD ; CLRF RH27SCANHOLD ; CLRF FSWINHOLD ;FSW SCAN HOLD. CLRF DRM1SCAN_HOLD ; CLRF DRM2SCAN_HOLD ; CLRF DRM3SCAN_HOLD ; ; CLRF POT1FILT ;CONTROL POTENTIOMETER FILTERS. CLRF POT2FILT ;CONTROL POTENTIOMETER FILTERS. CLRF POT3FILT ;CONTROL POTENTIOMETER FILTERS. CLRF POT4FILT ;CONTROL POTENTIOMETER FILTERS. CLRF POT5FILT ;CONTROL POTENTIOMETER FILTERS. CLRF POT6FILT ;CONTROL POTENTIOMETER FILTERS. CLRF POT7FILT ;CONTROL POTENTIOMETER FILTERS. CLRF POT8FILT ;CONTROL POTENTIOMETER FILTERS. ; CLRF RECFLAGS1 ; CLRF RECFLAGS2 ; CLRF RECFLAGS3 ; CLRF RECFLAGS4 ; CLRF RECFLAGS5 ; CLRF RECFLAGS6 ; ; CLRF BASS_ON_FLAGS ; CLRF BASS_OFF_FLAGS ; CLRF CHORD_ON_FLAGS ; CLRF CHORD_OFF_FLAGS ; CLRF RH11_ON_FLAGS ; CLRF RH11_OFF_FLAGS ; CLRF RH12_ON_FLAGS ; CLRF RH12_OFF_FLAGS ; CLRF RH22_ON_FLAGS ; CLRF RH22_OFF_FLAGS ; ; CLRF RH11ONOFF_FLAGS ; CLRF RH12ONOFF_FLAGS ; CLRF RH21ONOFF_FLAGS ; CLRF RH22ONOFF_FLAGS ; ; CALL FSW1REGCLEAR ; CALL FSW2REGCLEAR ; CALL FSW3REGCLEAR ; CALL FSW4REGCLEAR ; ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ;======================================================================================================== ATSAMTEST: ;ATSAM9773 INTERNAL TEST, IF CLRF PORTB ; RH2-7 & RH2-12 HELD DOWN AT POWER UP. MOVLW 0x01 ; RESULT IS 3 SINE TONES :- MOVWF PORTB ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ; 1st. OF 1.18KHz. 2nd. of 876Hz. ANDLW 0x7F ; 3rd of 295hz continuous for XORLW 0x21 ; internal diags pass. BNZ ATSAMTESTEND ; MOVLW 0xB0 ;SENDS NRPN 3751=23h MOVWF NORPNR1 ; MOVLW 0x63 ;CONTROL #99. MOVWF NORPNR2 ; MOVLW 0x37 ;VALUE. MOVWF NORPNR3 ; MOVLW 0x62 ;CONTROL #98. MOVWF NORPNR4 ; MOVLW 0x51 ;VALUE MOVWF NORPNR5 ; MOVLW 0x06 ;CONTROL #6. MOVWF NORPNR6 ; MOVLW 0x23 ;VALUE. MOVWF NORPNR7 ; CALL NORPN7BYTE ; BSF DISPLAYREG, GREEN ;GREEN LED ONLY LEFT ON. BCF DISPLAYREG, MUTE1LED ;MUTE 1 LED. BCF DISPLAYREG, MUTE2LED ;MUTE 2 LED. BCF DISPLAYREG, MIDI_LED ;SET RB4, MIDI_LED LED TO OFF. MOVFF DISPLAYREG, PORTB ; BCF PORTC, 3 ;ENABLE LED COM BUSS. ; ATSAMTESTLOOP: ; CLRF PORTB ; RH2-8 & RH2-11 HELD DOWN TO EXIT. MOVLW 0x01 ; RESULT IS 3 SINE TONES :- MOVWF PORTB ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ; ANDLW 0x7F ; XORLW 0x12 ;PRESS RH2-8 & RH2-11 TO EXIT TEST TONE LOOP. BNZ ATSAMTESTLOOP ;TONES CONTINUE UNTIL RELEASE BUTTONS PRESSED. ;........................................................................................................................................................................................ ATSAMTESTEND: ; BCF PORTC, 4 ;~RESET(RC4) IS LO. CLRF DISPLAYREG ; BSF DISPLAYREG, MIDI_LED ; MOVLW 0x08 ; MOVWF PORTB ;SEND 1 TO RB3, SETS LED TO MIDI_LED. BCF PORTC, 3 ;SEND 0 TO RC3, ENABLE LED COMMON. ; MOVLW 0x60 ;>128ms. MOVWF GENTIME1 ; ASYNRSWAIT: ;WAIT PERIOD FOR ~RESET. TSTFSZ GENTIME1 ; BRA ASYNRSWAIT ; BSF PORTC, 4 ;~RESET(RC4) IS HI (I.E. RUN). AISRUNSET: ;WAIT FOR SYNTH-RUNNING SIGNAL. ; (ATSAM9733 OUTPUT FLAG). BTFSS PORTC, 5 ;IS RUN SET (YES->SYNTH IS READY). BRA AISRUNSET ;NO, WAIT FOR RUN SIGNAL FROM SYNTH. ;....................................................................... MOVLW 0x80 ;MORE THAN 128ms SYNTH CHIP SETTLING TIME.. MOVWF GENTIME1 ;THIS IS SYNTH SETTLING DELAY WAIT ASYNRSWAIT2: ; PERIOD FOR BEFORE SENDING DATA. TSTFSZ GENTIME1 ; BRA ASYNRSWAIT2 ; BSF PORTB, GREEN ;SEND 1 TO RB4, SETS LED TO GREEN. BSF GENFLAGS10, DIP_CHNG_LED ;SEND 1 TO RB4, SETS LED TO GREEN. ;======================================================================================================== RHTOBASSCHECK: ;CONVERT RH1 (CH1) TO BASS (CH3). CLRF PORTB ; So called orchestral bass mode . MOVLW 0x08 ; RH11 & RH16 HELD DOWN AT POWER UP. MOVWF PORTB ; NOP ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ; ANDLW 0x7F ; XORLW 0x21 ; BNZ RHTOBASSCHKEND ; MOVLW 0xF0 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTG WREG, 0 ; ; MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xF0 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; RHTOBASSCHKEND: ; CLRF PORTB ; ;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CAVAGCOMPATCHECK: ;COMPATIBILITY WITH CAVAGNOLO SYSTEM CLRF PORTB ; ON Ch16, 15, 14. MOVLW 0x02 ; RH21 & RH26 HELD DOWN AT POWER UP. MOVWF PORTB ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ; ANDLW 0x7F ; XORLW 0x21 ; BNZ CAVAGCOMPATEND ; MOVLW 0x00 ;ENABLE 'CAVAGNOLO' COMPATIBILITY. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xF9 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; CAVAGCOMPATEND: ; CLRF PORTB ; ;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- GMMODULESET: ; MOVLW 0x01 ;RH2MUTE HELD DOWN AT POWER UP. MOVWF PORTB ; RESULT IS GM MODULE. NOP ; NOP ; MOVF PORTD, W ; ANDLW 0x7F ; XORLW 0x40 ; BNZ GMMODEND ; BCF DISPLAYREG, MUTE1LED ;MUTE LED. BCF DISPLAYREG, MUTE2LED ;MUTE LED. BCF PORTC, 3 ;ENABLE LED COM BUSS. CLRF MIDIBYTCNT ;MIDI BUFFER BYTE COUNTER. GMJ1: ;..................... TSTFSZ LEDFLASH ; BRA GMLEDFMJ1 ; BCF DISPLAYREG, MIDI_LED ;SET RB4, MIDI_LED LED TO OFF. BSF DISPLAYREG, GREEN ;TURN ON GREEN GMLEDFMJ1: ; MOVFF DISPLAYREG, PORTB ; ;...................... TSTFSZ MIDIBYTCNT ;ARE THERE ANY BYTES IN BUFFER ? BRA GMIDIFILJ0 ;YES. GOTO GMJ1 ;NO. -> EXIT TO WAIT. GMIDIFILJ0: ;....................... MOVF POSTINC2, W ;GET BYTE FROM BUFFER. MOVWF MIDITEMP1 ;HOLD INPUT BYTE. BTFSC FSR2H, 0 ;TEST BUFFER INDEX. LFSR 2, 0x200 ;MIDI BUFFER START >0x2FF. DECF MIDIBYTCNT ;HOLDS NUMBER OF BYTES TO GO. GMIDISNGJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA GMIDISNGJ1 ; MOVFF MIDITEMP1, TXREG ;SEND MIDI. ; BSF DISPLAYREG, MIDI_LED ;MIDI_LED LED FLASHES WITH MIDI BYTES. BCF DISPLAYREG, GREEN ;GREEN LED ONLY LEFT ON. MOVLW 0x10 ;LED DIP TIME. MOVWF LEDFLASH ; BRA GMJ1 ; ;....................................................................... GMMODEND: ; CLRF PORTB ; ;================================================================================================= BASSBUTTON_ON_POWERUP: ;REJECT ALL MESSAGES BUT NOTES - UNLESS YOU :- MOVLW 0x20 ; HOLD Bass BANK CHANGE, ON POWER-UP, MOVWF PORTB ; TO NOP ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ;IS BASS BANK BUTTON ON ? ANDLW 0x7F ; XORLW 0x40 ; BNZ BBPWRUPEND ; ; MOVLW 0xF3 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTG WREG, 6 ;MIDI NOTE ON/OFF INFO ONLY. ; MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xF3 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BBPWRUPEND: ; ;================================================================================================= EDIT_MODE_SET: ;SOUND TRY-OUT MODE SET. MOVLW 0x04 ;HOLD DOWN RH1 MUTE AT POWER UP. MOVWF PORTB ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ; ANDLW 0x7F ; MOVWF TEMPHOLD ; XORLW 0x40 ;BASS OCT BUTTON HELD. BNZ EMSTST2 ; BSF MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. ; MOVLW 0x00 ;GM BANK SEL MSB. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xFD ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; MOVLW 0x00 ;GM BANK SEL MSB. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xFC ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA EMSEND ; EMSTST2: ; MOVF TEMPHOLD, W ; XORLW 0x60 ;RH1 MUTE & RH112 BUTTONS HELD. BNZ EMSEND ; BSF MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. ; MOVLW 0x7F ;MT32 BANK SEL MSB. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xFD ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; MOVLW 0x7F ;MT32 BANK SEL MSB. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xFC ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; EMSEND: ; CLRF PORTB ; ;================================================================================================= RACFE: ;REASSIGN CONTROLS FOR SOUND EDITING. - NOT IMPLEMENTED AS YET................. MOVLW 0x02 ;HOLD RH2-OCT ON POWERUP + ANOTHER MOVWF PORTB ; BUTTON TO SET SOUND EDIT. NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ; ANDLW 0x7F ; XORLW 0x40 ;IS RH2-OCT BUTTON ON ? BNZ RACFE_END ;................ MOVLW 0x20 ;BASS 1. MOVWF PORTB ; BUTTON TO SET SOUND EDIT. NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ; ANDLW 0x7F ; XORLW 0x01 ;IS BASS 1 BUTTON ON ? BNZ RACFE_CHORD ; BSF GENFLAGS5, EDBASBIT ; BRA RACFE_END ;................ RACFE_CHORD: ; MOVLW 0x10 ;CHORD 1. MOVWF PORTB ; BUTTON TO SET SOUND EDIT. NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ; ANDLW 0x7F ; XORLW 0x01 ;IS CHORD 1 BUTTON ON ? BNZ RACFE_RH1 ; BSF GENFLAGS5, EDCHDBIT ; BRA RACFE_END ;................ RACFE_RH1: ; MOVLW 0x08 ;RH1. MOVWF PORTB ; BUTTON TO SET SOUND EDIT. NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ; ANDLW 0x7F ; XORLW 0x01 ;IS RH1-1 BUTTON ON ? BNZ RACFE_RH2 ; BSF GENFLAGS5, EDRH1BIT ; BRA RACFE_END ;................ RACFE_RH2: ; MOVLW 0x02 ;RH2. MOVWF PORTB ; BUTTON TO SET SOUND EDIT. NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ; ANDLW 0x7F ; XORLW 0x01 ;IS RH2-1 BUTTON ON ? BNZ RACFE_RH2ONLY ; BSF GENFLAGS5, EDRH2BIT ; BRA RACFE_END ;................ RACFE_RH2ONLY: ; ;................ RACFE_END: ; CLRF PORTB ; ;========================================================================================================= FACTORY_PRESETS: ;ARE SECURITY BYTES IN PLACE ? MOVLW 0xAA ; MOVWF TEMP1 ; MOVLW 0xFF ;EEPROM CORRUPT1 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. CPFSEQ TEMP1 ; BRA LOADPRESETS ; ; MOVLW 0x55 ; MOVWF TEMP1 ; MOVLW 0xFE ;EEPROM CORRUPT2 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. CPFSEQ TEMP1 ; BRA LOADPRESETS ; ;............................................................................ MOVLW 0x10 ;HOLD CHORD BANK ON POWERUP. MOVWF PORTB ;TO WRITE PRESETS TO EEPROM. NOP ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ;IS CHORD BANK BUTTON ON ? ANDLW 0x7F ; XORLW 0x40 ; BZ LOADPRESETS ; GOTO PRELOADEND ; LOADPRESETS: ;........................................................................................................................................... MOVLW 0x7C ;Top EEProm address +1. MOVWF TEMP1 ; PL1: ; DECF TEMP1 ; MOVFF TEMP1, TEMP2 ; CALL FACTORYLOAD ;GET INSTRUMENT NUMBER IN WREG. MOVWF EEDATA ;VALUE TO WRITE. MOVF TEMP1, W ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; TSTFSZ TEMP1 ; BRA PL1 ;WRITE LOOP. ;............................................................................................................................................ MOVLW 0xAA ;CHECK-BYTE1. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xFF ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; MOVLW 0x55 ;CHECK-BYTE2. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xFE ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; MOVLW 0x00 ;BANK SEL LSB. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xFD ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; MOVLW 0x00 ;BANK SEL MSB. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xFC ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; MOVLW 0x20 ;PORTAMENTO PRESET VALUE. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xFB ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; MOVLW 0x60 ;PERCUSSION VOLUME LEVEL. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xFA ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; MOVLW 0x01 ;DISABLE'CAVAGNOLO'COMPATIBILITY MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xF9 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ;VERSION WAS HERE F5,F7,F8 NOW AT C0 -> C3. ;................................................................ MOVLW 0x58 ;TREM DEPTH DEFAULT VALUE. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xF5 ;
EXIT TO INTERNAL DATA SEND. MIDIFILJ0: ;....................... MOVLW 0xFF ;ANY EXTERNAL INPUT BYTES WILL MOVWF AS_TIMER ; RESET ACTIVE-SENSING TIMER. ;...................... MOVF POSTINC2, W ;GET BYTE FROM BUFFER. MOVWF MIDITEMP1 ;HOLD INPUT BYTE. BTFSC FSR2H, 0 ;TEST BUFFER INDEX. LFSR 2, 0x200 ;MIDI BUFFER START >0x2FF. DECF MIDIBYTCNT ;HOLDS NUMBER OF BYTES TO GO. FIRSTIMEIN: ;..................................................................... BTFSS MIDISTAT, NOSTAT_FLAG ;WAIT FOR A STATUS BYTE FLAG,1st BRA MNOSTAT ; TIME IN. GOTO MFIRST_TIME ; MNOSTAT: ; BTFSS MIDITEMP1, 7 ;IS IT A STATUSBYTE ? GOTO MIDITHRUND ;NO - EXIT. >>>>>>>>>>>>> BSF MIDISTAT, NOSTAT_FLAG ;YES. FLAG IT. MFIRST_TIME: ;..................................................................... BTFSS MIDITEMP1, 7 ;IS IT A STATUS OR DATABYTE ? GOTO M_DATA_BYTES ;DATABYTE. ;.................................................................. SETF AS_TIMER ;ASCERTAIN SORT STATE. ;STATUS RESETS ACTIVE SENSING TIMER. ANDLW 0xF8 ; XORLW 0xF8 ;REAL TIME. BNZ MIDINOTRT ;IS IT A REAL TIME STATUS BYTE MOVLW 0xFE ;0xFE = ACTIVE SENSING. CPFSEQ MIDITEMP1 ; BRA MRTND ; BSF MIDISTAT, AS_FLAG ;ACTIVE SENSING ENGAGED BIT. GOTO MIDIEXIT ;EXIT FILTER. ;.................................... MRTND: ; ;ALL OTHER RT BYTES IGNORED. GOTO MIDITHRUND ;EXIT FILTER. MIDINOTRT: ;..................................................................... BCF MIDISTAT2, DBIGNOR_FLAG ; IGNORE BYTE FLAG. BCF MIDISTAT, RS_FLAG ;NEW STATUS CLEARS:- RUNNING-STATUS. BCF MIDISTAT, DB1_FLAG ; 1st DATA BYTE FLAG. BCF MIDISTAT, DB2_FLAG ; 2nd DATA BYTE FLAG. BCF MIDISTAT, SINGLE_FLAG ; SINGLE DATA BYTE FLAG. ;.................................. MOVF MIDITEMP1, W ;HAS CURRENT STATUS BYTE. ; ANDLW 0xF0 ; XORLW 0xF0 ;SYSTEM COMMON. BNZ M_CHAN_CHECK ;IS IT A SYSCOM STATUS BYTE ? ;.................................... MOVFF MIDITEMP1, MTEMP ; MOVLW 0xF0 ;SYSX START. CPFSEQ MTEMP ; BRA MNOT_SYSXSRT ;IT IS NOT SYSX START. BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE DATABYTES FLAG. GOTO MIDITHRUND ;IGNORE SYS COM & EXIT FILTER. ;.................................... MNOT_SYSXSRT: ; MOVFF MIDITEMP1, MTEMP ; MOVLW 0xF7 ;EOX. CPFSEQ MTEMP ; BRA MNOT_EOX ; BCF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ;IGNORE SYS COM & EXIT FILTER. MNOT_EOX: ;................................... MOVFF MIDITEMP1, MTEMP ; MOVLW 0xF6 ;TUNE REQUEST. CPFSEQ MTEMP ; BRA M_F5 ;IT IS NOT TUNE REQUEST. GOTO MIDITHRUND ; ;.................................... M_F5: ; MOVFF MIDITEMP1, MTEMP ; MOVLW 0xF5 ;UNDEFINED. CPFSEQ MTEMP ; BRA M_F4 ; GOTO MIDITHRUND ; ;.................................... M_F4: ; MOVFF MIDITEMP1, MTEMP ; MOVLW 0xF4 ;UNDEFINED. CPFSEQ MTEMP ; BRA M_F3 ; GOTO MIDITHRUND ; ;.................................... M_F3: ; MOVFF MIDITEMP1, MTEMP ; MOVLW 0xF3 ;SONG SELECT. (HAS 1 DB). CPFSEQ MTEMP ; BRA M_F2 ; BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ; ;.................................... M_F2: ; MOVFF MIDITEMP1, MTEMP ; MOVLW 0xF2 ;SONG POSITION. (HAS 2 DBs). CPFSEQ MTEMP ; BRA M_F1 ; BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ; ;.................................... M_F1: ; MOVFF MIDITEMP1, MTEMP ; MOVLW 0xF1 ;MTC QUARTER FRAME MESSAGE. CPFSEQ MTEMP ; (HAS 1 DB). BRA MSYSCOMND ; BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ; ;.................................... MSYSCOMND: ; GOTO MIDITHRUND ;IGNORE SYS COM & EXIT FILTER. ;....................................................................... M_CHAN_CHECK: ; BTFSC GENFLAGS4, CHANCONV_BIT ;CANCEL CHANNEL CONVERSION. BRA M_CHAN_CHNG_END ; ;....................................Ch14,15,16 converter, MOVF MIDITEMP1, W ; convert content of MIDITEMP1. ANDLW 0x0F ; to other channels. MOVWF MTEMP ; MOVLW D'15' ;Ch 16 = TREB. CPFSEQ MTEMP ; BRA M_NOTCH16 ; MOVF MIDITEMP1, W ; ANDLW 0xF0 ; ;IORLW 0x00 ;Convert to CHAN 1. MOVWF MIDITEMP1 ; BRA M_CHAN_CHNG_END ; M_NOTCH16: ; MOVF MIDITEMP1, W ; ANDLW 0x0F ; MOVWF MTEMP ; MOVLW D'14' ;Ch 15 = BASS. CPFSEQ MTEMP ; BRA M_NOTCH15 ; MOVF MIDITEMP1, W ; ANDLW 0xF0 ; IORLW 0x02 ;CHAN 3. MOVWF MIDITEMP1 ; BRA M_CHAN_CHNG_END ; M_NOTCH15: ; MOVF MIDITEMP1, W ; ANDLW 0x0F ; MOVWF MTEMP ; MOVLW D'13' ;Ch 14 = CHORDS. CPFSEQ MTEMP ; BRA M_NOTCH14 ; MOVF MIDITEMP1, W ; ANDLW 0xF0 ; IORLW 0x01 ;CHAN 2. MOVWF MIDITEMP1 ; ;BRA M_CHAN_CHNG_END ; M_NOTCH14: ; M_CHAN_CHNG_END: ; ;.................................... BTFSS GENFLAGS8, CHAN1TO3_BIT ;CANCEL CHANNEL CONVERSION of Ch1 to Ch3. BRA M_NOTCH1 ; BSF GENFLAGS8, CANCEL1TO3_BIT; MOVF MIDITEMP1, W ; ANDLW 0x0F ; MOVWF MTEMP ; MOVLW D'0' ;Ch 1 = Main Right-hand. CPFSEQ MTEMP ; BRA M_NOTCH1 ; BCF GENFLAGS8, CANCEL1TO3_BIT; MOVF MIDITEMP1, W ; ANDLW 0xF0 ; IORLW 0x02 ;CHAN 3. MOVWF MIDITEMP1 ; M_NOTCH1: ; ;....................................................................... M_NOTE_OFF: ; MOVF MIDITEMP1, W ; ANDLW 0xF0 ; MOVWF MTEMP ; MOVLW 0x80 ; CPFSEQ MTEMP ; BRA MNOT_8N ; MOVF MIDITEMP1, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; BTFSS GENFLAGS6, NOTESONLY ;NOTES ONLY MODE BIT. MOVLW 0x02 ;ONLY RESPOND TO CHANS<4. BTFSC GENFLAGS6, NOTESONLY ;NOTES ONLY MODE BIT. MOVLW 0x03 ;ONLY RESPOND TO CHANS<5. CPFSGT MTEMP ;SKIP IF f>W. BRA M_NOTEOFF_1 ;SEND TO SYNTH. BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ;IT IS NOT NOTE ON, ON CHAN5 OR LESS. ; M_NOTEOFF_1: ; MOVF MIDITEMP1, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x03 ;CHANNEL 4. CPFSEQ MTEMP ; BRA M_NOTEOFF_2 ;SEND TO SYNTH. BCF MIDISTAT2, CH4LAYER_FLAG; M_NOTEOFF_2: ; BSF MIDISTAT, DB1_FLAG ;1st DATA BYTE FLAG. BSF MIDISTAT, DB2_FLAG ;2nd DATA BYTE FLAG. MOVFF MIDITEMP1, MAINSBHOLD ; GOTO MIDITHRUND ; ;........................................................................ MNOT_8N: ; MOVF MIDITEMP1, W ; ANDLW 0xF0 ; MOVWF MTEMP ; MOVLW 0x90 ;NOTE ON. CPFSEQ MTEMP ; BRA MNOT_9N ;IT IS NOT NOTE ON. ; MOVF MIDITEMP1, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; BTFSS GENFLAGS6, NOTESONLY ;NOTES ONLY MODE BIT. MOVLW 0x02 ;ONLY RESPOND TO CHANS<4. BTFSC GENFLAGS6, NOTESONLY ;NOTES ONLY MODE BIT. MOVLW 0x03 ;ONLY RESPOND TO CHANS<5. CPFSGT MTEMP ;SKIP IF f>W. BRA M_NOTEON_TST2 ;CHANS 4,3,2,1 ONLY. BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ;IT IS NOT NOTE ON, ON CHAN5 OR LESS. ; M_NOTEON_TST2: ; MOVF MIDITEMP1, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x03 ;CHANNEL 4. CPFSEQ MTEMP ; BRA M_NOTEON_1 ;SEND TO SYNTH. BCF MIDISTAT2, CH4LAYER_FLAG ; BTFSC GENFLAGS3, CH4FIRST_FLAG ; BRA M_NOTEON_1 ;SEND TO SYNTH. BSF GENFLAGS3, CH4FIRST_FLAG ;CH4 FIRST TIME IN FLAG - CLEARS MOVLW 0xB3 ; NOTEON IN CH1->CH4 CONVERTER. MOVWF BYTE1OF3 ; MOVLW 0x7B ;ALL NOTES OFF CH4. MOVWF BYTE2OF3 ; MOVLW 0x00 ; MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; M_NOTEON_1: ; BSF MIDISTAT, DB1_FLAG ;1st DATA BYTE FLAG. BSF MIDISTAT, DB2_FLAG ;2nd DATA BYTE FLAG. MOVFF MIDITEMP1, MAINSBHOLD ; GOTO MIDITHRUND ; MNOT_9N: ;........................................................................ MOVF MIDITEMP1, W ;PRESSURE IS NOT RECOGNISED. ANDLW 0xF0 ; MOVWF MTEMP ; MOVLW 0xA0 ;POLY PRESSURE. CPFSEQ MTEMP ; BRA MNOT_AN ;IT IS NOT POLY PRESSURE. BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ; MNOT_AN: ;........................................................................ MOVF MIDITEMP1, W ; ANDLW 0xF0 ; MOVWF MTEMP ; MOVLW 0xB0 ;CONTROL CHANGE. CPFSEQ MTEMP ; BRA MNOT_BN ;IT IS NOT CONTROL CHANGE. ; BTFSC GENFLAGS6, NOTESONLY ;NOTES ONLY MODE BIT. BRA MCONT1 ; BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ; MCONT1: ; MOVF MIDITEMP1, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x03 ;ONLY RESPOND TO CHANS<5. CPFSGT MTEMP ;SKIP IF f>W. GOTO M_CONTROL_1 ;SEND TO SYNTH. BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ;IT IS NOT CONTROL, ON CHAN4 OR LESS. ; M_CONTROL_1: ; BSF MIDISTAT, DB1_FLAG ;1st DATA BYTE FLAG. BSF MIDISTAT, DB2_FLAG ;2nd DATA BYTE FLAG. MOVFF MIDITEMP1, MAINSBHOLD ; GOTO MIDITHRUND ; MNOT_BN: ;....................................................................... MOVF MIDITEMP1, W ; ANDLW 0xF0 ; MOVWF MTEMP ; MOVLW 0xC0 ;PROGRAMME CHANGE. CPFSEQ MTEMP ; BRA MNOT_CN ;IT IS NOT PROGRAMME CHANGE. ; BTFSC GENFLAGS6, NOTESONLY ;NOTES ONLY MODE BIT. BRA MPROG1 ; BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ; MPROG1: ; ; MOVF MIDITEMP1, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x05 ;ONLY RESPOND TO CHANS<7. CPFSGT MTEMP ;SKIP IF f>W. BRA M_PC_1 ;SEND TO SYNTH. BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ; ; M_PC_1: ; BSF MIDISTAT, SINGLE_FLAG ;SINGLE DATA BYTE FLAG. MOVFF MIDITEMP1, MAINSBHOLD ; GOTO MIDITHRUND ; MNOT_CN: ;.................................... MOVF MIDITEMP1, W ;CHAN PRESSURE IS NOT RECOGNISED. ANDLW 0xF0 ; MOVWF MTEMP ; MOVLW 0xD0 ;CHANNEL PRESSURE. CPFSEQ MTEMP ; BRA MNOT_DN ;IT IS NOT CHANNEL PRESSURE. BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ; MNOT_DN: ;................................... MOVF MIDITEMP1, W ; ANDLW 0xF0 ; MOVWF MTEMP ; MOVLW 0xE0 ;PITCH WHEEL. CPFSEQ MTEMP ; BRA MNOT_EN ;IT IS NOT PITCH WHEEL. ; BTFSC GENFLAGS6, NOTESONLY ;NOTES ONLY MODE BIT. BRA MPWHL1 ; BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ; MPWHL1: ; MOVF MIDITEMP1, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x03 ;ONLY RESPOND TO CHANS<5. CPFSGT MTEMP ;SKIP IF f>W. GOTO M_PW_1 ;SEND TO SYNTH. BSF MIDISTAT2, DBIGNOR_FLAG ;IGNORE SUCCEEDING DATABYTES FLAG. GOTO MIDITHRUND ; ; M_PW_1: ; BSF MIDISTAT, DB1_FLAG ;1st DATA BYTE FLAG. BSF MIDISTAT, DB2_FLAG ;2nd DATA BYTE FLAG. MOVFF MIDITEMP1, MAINSBHOLD ; GOTO MIDITHRUND ; MNOT_EN: ;.................................................. NOT En ? GOTO MIDITHRUND ; ;...................................................................... M_DATA_BYTES: ; BTFSC MIDISTAT2, DBIGNOR_FLAG ; GOTO MIDITHRUND ; BTFSC MIDISTAT, SINGLE_FLAG ; BRA M_SINGLEDB ; BTFSC MIDISTAT, DB1_FLAG ; BRA M_DATA1 ; BTFSC MIDISTAT, DB2_FLAG ; BRA M_DATA2 ; BRA M_RUNNING ; ; M_SINGLEDB: ;.................................... BCF MIDISTAT, SINGLE_FLAG ; BSF MIDISTAT2, SENDSNG_FLAG ; BSF GENFLAGS2, SNG2_FLAG ; MOVFF MIDITEMP1, MAINSNGHOLD ; BRA MIDINTSEND ; M_DATA1: ;.................................... BCF MIDISTAT, DB1_FLAG ;1st DATA BYTE OF 2. BSF GENFLAGS2, DB12_FLAG ; MOVFF MIDITEMP1, MAINDB1HOLD ; BRA MIDITHRUND ;> M_DATA2: ;.................................... BCF MIDISTAT, DB2_FLAG ;2nd DATA BYTE OF 2. BSF MIDISTAT2, SEND2DB_FLAG ;WILL NOW SEND-> BSF GENFLAGS2, DB22_FLAG ; MOVFF MIDITEMP1, MAINDB2HOLD ; BRA MIDINTSEND ; M_RUNNING: ;.................................... BSF MIDISTAT, RS_FLAG ;SET RUNNING-STATUS FLAG. BTFSS GENFLAGS2, SNG2_FLAG ; BRA M_RS1 ; BSF MIDISTAT, SINGLE_FLAG ; BCF GENFLAGS2, SNG2_FLAG ; BRA M_SINGLEDB ;> M_RS1: ; BTFSS GENFLAGS2, DB12_FLAG ; BRA MIDITHRUND ;> BSF MIDISTAT, DB1_FLAG ; BSF MIDISTAT, DB2_FLAG ; BCF GENFLAGS2, DB12_FLAG ; BRA M_DATA_BYTES ;> ;...................................................................................................... MIDITHRUND: ;SEND INTERNAL DATAto SYNTH CHIP (ATSAM9773) IF READY. BTFSC SCANSTAT, MIDI_RTS_FLAG ;SCANSTAT, 0. CALL PROGCHNGSEND ;PROGRAM CHANGE SEND ROUTINE. BCF SCANSTAT, MIDI_RTS_FLAG ;NO MORE PROG CHANGE TO SEND. ;............................................................................. TSTFSZ POTSTAT ;SEE IF ANY POTS HAVE CHANGED. BRA MCONTROLP ; BRA CONTEND ; MCONTROLP: ; MOVF POTCHAN, W ;CONTROL. MCONTROL0: ;POT SEND. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTROL0 ; MOVWF TXREG ;SEND MIDI. MOVF POTCONT, W ;CONTROL NUMBER. MCONTROL1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTROL1 ; MOVWF TXREG ;SEND MIDI. MOVF POTSTORE, W ; MCONTROL2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTROL2 ; MOVWF TXREG ;SEND MIDI. CLRF POTSTAT ; ;........................................................................ BTFSS MIDISTAT2, CH6ON_FLAG ; BRA MCONT6END ; MOVF POTCHAN, W ; ANDLW 0x0F ; MOVWF TEMP1 ; MOVLW 0x02 ; CPFSEQ TEMP1 ; BRA MCONT6END ; ; MOVF POTCHAN, W ;CONTROL. ADDLW 0x03 ;CONVERT TO CHAN 6. MCONTROL3: ;POT SEND. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTROL3 ; MOVWF TXREG ;SEND MIDI. MOVF POTCONT, W ;CONTROL NUMBER. MCONTROL4: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTROL4 ; MOVWF TXREG ;SEND MIDI. MOVF POTSTORE, W ; MCONTROL5: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTROL5 ; MOVWF TXREG ;SEND MIDI. BRA CONTEND ; MCONT6END: ; ;........................................................................ BTFSS GENFLAGS2, CH5ON_FLAG ; BRA MCONT5END ; MOVF POTCHAN, W ; ANDLW 0x0F ; MOVWF TEMP1 ; MOVLW 0x00 ; CPFSEQ TEMP1 ; BRA MCONT5END ; ; MOVLW 0xB4 ;CONTROL. CONVERT TO CHAN 5. M5CONTROL3: ;POT SEND. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M5CONTROL3 ; MOVWF TXREG ;SEND MIDI. MOVF POTCONT, W ;CONTROL NUMBER. M5CONTROL4: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M5CONTROL4 ; MOVWF TXREG ;SEND MIDI. MOVF POTSTORE, W ; M5CONTROL5: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M5CONTROL5 ; MOVWF TXREG ;SEND MIDI. MCONT5END: ; ; BTFSS GENFLAGS8, RH1L3EN ; BRA MCONT7END ; MOVF POTCHAN, W ; ANDLW 0x0F ; MOVWF TEMP1 ; MOVLW 0x00 ; CPFSEQ TEMP1 ; BRA MCONT7END ; ; MOVLW 0xB6 ;CONTROL. CONVERT TO CHAN 7. M7CONTROL3: ;POT SEND. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M7CONTROL3 ; MOVWF TXREG ;SEND MIDI. MOVF POTCONT, W ;CONTROL NUMBER. M7CONTROL4: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M7CONTROL4 ; MOVWF TXREG ;SEND MIDI. MOVF POTSTORE, W ; M7CONTROL5: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M7CONTROL5 ; MOVWF TXREG ;SEND MIDI. MCONT7END: ; ;....................................................................... CONTEND: ;Rotary controls send end. ;........................................................................................................................................................................................ M_NORPN_SEND: ;SENDS 7 BYTE NoRPN MESSAGES. BTFSS GENFLAGS1, NORPN_FLAG ;used for coarse tunning down 12. BRA M_NORPN_END ; M_NORPN_SEND1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M_NORPN_SEND1 ; MOVFF NORPN1, TXREG ;SEND MIDI. M_NORPN_SEND2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M_NORPN_SEND2 ; MOVFF NORPN2, TXREG ;SEND MIDI. M_NORPN_SEND3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M_NORPN_SEND3 ; MOVFF NORPN3, TXREG ;SEND MIDI. M_NORPN_SEND4: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M_NORPN_SEND4 ; MOVFF NORPN4, TXREG ;SEND MIDI. M_NORPN_SEND5: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M_NORPN_SEND5 ; MOVFF NORPN5, TXREG ;SEND MIDI. M_NORPN_SEND6: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M_NORPN_SEND6 ; MOVFF NORPN6, TXREG ;SEND MIDI. M_NORPN_SEND7: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA M_NORPN_SEND7 ; MOVFF NORPN7, TXREG ;SEND MIDI. BCF GENFLAGS1, NORPN_FLAG ; M_NORPN_END: ; ;..................................................................... M_CONTROLS_2: ;CONTROL CHANGE MIDI SEND. BTFSS GENFLAGS1, MUTE_FLAG ;USED FOR ALL NOTES OFF. BRA CONTS2END ; MOVF CONTCHAN, W ;CONTROL. MCONTS2ROL0: ;POT SEND. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS2ROL0 ; MOVWF TXREG ;SEND MIDI. MOVF CONTDB1, W ;CONTROL NUMBER. MCONTS2ROL1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS2ROL1 ; MOVWF TXREG ;SEND MIDI. MOVF CONTDB2, W ; MCONTS2ROL2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS2ROL2 ; MOVWF TXREG ;SEND MIDI. BCF GENFLAGS1, MUTE_FLAG ; ; BTFSC GENFLAGS2, CH5ON_FLAG ; BRA CONTS2END ; MOVLW 0xB4 ;ALL SOUND OFF CHAN 5. RH12ROL0: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH12ROL0 ; MOVWF TXREG ;SEND MIDI. MOVF CONTDB1, W ;CONTROL NUMBER. RH12ROL1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH12ROL1 ; MOVWF TXREG ;SEND MIDI. MOVF CONTDB2, W ; RH12ROL2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH12ROL2 ; MOVWF TXREG ;SEND MIDI. CONTS2END: ; ;------------------------------------------------------------------------ MIDINTSEND ; BTFSS MIDISTAT2, SENDSNG_FLAG ; BRA MIDI2DBTST ; ; BSF GENFLAGS10, DIP_CHNG_LED ; BSF GENFLAGS10, MIDI_LED_FLAG ; MIDISNGJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDISNGJ1 ; MOVFF MAINSBHOLD, TXREG ;SEND MIDI. ; BCF MIDISTAT2, SENDSNG_FLAG ; MIDISNGJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDISNGJ2 ; MOVFF MAINSNGHOLD, TXREG ;SEND MIDI. ; GOTO MIDINTXIT ;>single db message sent. ;....................................................................... MIDI2DBTST: ; BTFSS MIDISTAT2, SEND2DB_FLAG ; BRA MIDIRSTST ; BSF GENFLAGS10, DIP_CHNG_LED ; BSF GENFLAGS10, MIDI_LED_FLAG ;FLASH MIDI_LED LED FOR RECOGNISED MIDI. ;....................... BTFSS GENFLAGS4, BASS_RNG_BIT ; BRA MIDI3RNG1 ; ; MOVF MAINSBHOLD, W ;BASS RANGE MODIFY. ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x02 ;CH3 CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI3RNG1 ; MOVLW 0x27 ; CPFSGT MAINDB1HOLD ; BRA MIDI3RNG1 ; MOVLW 0x0C ;GO DOWN OCTAVE FOR NOTES SUBWF MAINDB1HOLD ; ABOVE 0x27. RESULT IN FILE. MIDI3RNG1: ;......................... ; BTFSC GENFLAGS8, CANCEL1TO3_BIT;If from Ch3 then no convert. BRA MIDI3RNG3 ; BTFSS GENFLAGS8, CHAN1TO3_BIT ;Rhand plays bass mode. BRA MIDI3RNG3 ; MOVF MAINSBHOLD, W ;BASS RANGE MODIFY. ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x02 ;CH3 CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI3RNG3 ; MOVLW 0x18 ;GO DOWN 2 OCTAVES. SUBWF MAINDB1HOLD ; RESULT IN FILE. BSF GENFLAGS1, MUTE1_FLAG ; BCF DISPLAYREG, MUTE1LED ;'RH1-ON' LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. BSF GENFLAGS1, MUTE2_FLAG ; BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BCF MIDISTAT2, CH4LAYER_FLAG;CH4 MIMICS CH1. MIDI3RNG3: ; ;......................... MOVF MAINSBHOLD, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x00 ;CH1 CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI2CH4TST1 ; MOVF MAINSBHOLD, W ; ADDLW 0x03 ;CONVERT TO Ch4. MOVWF CH4SBHOLD ;HOLD Ch4 STATUS BYTE. MOVFF MAINDB2HOLD, CH4DB2HOLD ; ; BTFSS GENFLAGS1, MUTE1_FLAG ;MUTE RH1. BRA MIDI2SND ; BRA MIDI2CH4SEND ; ;.................................... MIDI2CH4TST1: ; MOVF MAINSBHOLD, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x03 ;CH4. CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI2SND ; BTFSC GENFLAGS1, MUTE2_FLAG ;MUTE RH2. BRA MIDI2END ;> ;.................................... MIDI2SND: ;CHECK ACTIVE CHANNEL. For ; MOVF MAINSBHOLD, W ; 'blank-instrument' muting. ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x02 ;CH3 CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI2BYTJ0 ; MOVFF MAINDB2HOLD, CH3DB2HOLD ; BTFSC GENFLAGS4, BASVEL0_FLAG ; CLRF MAINDB2HOLD ; MOVF MAINDB2HOLD, W ; BRA MIDI2BTSTX ; MIDI2BYTJ0: ; MOVLW 0x01 ;CH2 CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI2BYTJ1 ; MOVFF MAINDB2HOLD, CH2DB2HOLD ; BTFSC GENFLAGS4, CHDVEL0_FLAG ; CLRF MAINDB2HOLD ; MOVF MAINDB2HOLD, W ; BRA MIDI2BTSTX ; MIDI2BYTJ1: ; MOVLW 0x00 ;CH1 CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI2BYTJ2 ; BTFSC GENFLAGS4, BLANK_RH1_FLAG; CLRF MAINDB2HOLD ; MOVF MAINDB2HOLD, W ; BRA MIDI2BTSTX ; MIDI2BYTJ2: ; MOVLW 0x03 ;CH4 CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI2BYTJ3 ; BTFSC GENFLAGS4, BLANK_RH2_FLAG; CLRF MAINDB2HOLD ; MOVF MAINDB2HOLD, W ; MIDI2BYTJ3: ; MIDI2BTSTX: ; ;........................ MIDI2DBJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI2DBJ1 ; MOVFF MAINSBHOLD, TXREG ;SEND MIDI SBYTE. ; MOVF MAINDB1HOLD, W ; MIDI2DBJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI2DBJ2 ; MOVWF TXREG ;SEND MIDI DBYTE 1. ; MOVF MAINDB2HOLD, W ; MIDI2DBJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI2DBJ3 ; MOVWF TXREG ;SEND MIDI DBYTE 2. ;........................................................................ MIDI2CH6TST1: ; BTFSC MIDISTAT2, CH6ON_FLAG ;ADD Ch6. LAYER TO BASS. BRA MIDI6CHK ; BTFSS MIDISTAT2, CH6MUTE_FLAG ;USED FOR ALL NOTES OFF. BRA MIDI6END ; ; MOVLW 0xB5 ;CONTROL. ALL SOUND OFF CHAN 6. MCONTS6ROL0: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS6ROL0 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x78 ;CONTROL NUMBER. MCONTS6ROL1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS6ROL1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ; MCONTS6ROL2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS6ROL2 ; MOVWF TXREG ;SEND MIDI. BCF MIDISTAT2, CH6MUTE_FLAG ; BRA MIDI6END ; ;............. MIDI6CHK: ; MOVF MAINSBHOLD, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x02 ;CH3 CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI6END ; MOVF MAINSBHOLD, W ; ADDLW 0x03 ;CONVERT TO Ch6. MIDI6DBJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI6DBJ1 ; MOVWF TXREG ;SEND MIDI. MIDI6DBJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI6DBJ2 ; MOVFF MAINDB1HOLD, TXREG ;SEND MIDI DB1. MOVF MAINDB2HOLD, W ; MIDI6DBJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI6DBJ3 ; MOVWF TXREG ;SEND MIDI DB2. BSF MIDISTAT2, CH6MUTE_FLAG ; MIDI6END: ; ;....................................................................... MIDI2CH4SEND: ; BTFSS MIDISTAT2, CH4LAYER_FLAG; CH4 MIMICS CH1. BRA MIDI41END ; BTFSC GENFLAGS1, MUTE2_FLAG ;MUTE RH2. BRA MIDI41END ; MOVF MAINSBHOLD, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x00 ;CH1 CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI41END ; MOVF CH4SBHOLD, W ; MIDI2DB4J1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI2DB4J1 ; MOVWF TXREG ;SEND MIDI. ; MOVF MAINDB1HOLD, W ; MIDI2DB4J2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI2DB4J2 ; MOVWF TXREG ;SEND MIDI. ; BTFSC GENFLAGS4, BLANK_RH2_FLAG ; CLRF CH4DB2HOLD ; MOVF CH4DB2HOLD, W ;SEND NOTE OFF. MIDI2DB4J3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI2DB4J3 ; MOVWF TXREG ;SEND MIDI. MIDI41END: ; ;........................................................................................................................................................................................ MIDI2CH5TST1: ;ADD Ch5.LAYER TO RH1. BTFSC GENFLAGS2, CH5ON_FLAG ; BRA MIDI5CHK ; BTFSS GENFLAGS2, CH5MUTE_FLAG ;USED FOR ALL NOTES OFF. BRA MIDI7END ; ; MOVLW 0xB4 ;CONTROL. ALL SOUND OFF CHAN 5. MCONTS5ROL0: ;POT SEND. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS5ROL0 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x78 ;CONTROL NUMBER. MCONTS5ROL1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS5ROL1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ; MCONTS5ROL2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS5ROL2 ; MOVWF TXREG ;SEND MIDI. BCF GENFLAGS2, CH5MUTE_FLAG ; ;....................................................................... MOVLW 0xB6 ;CONTROL. ALL SOUND OFF CHAN 7. MCONTS7ROL0: ;POT SEND. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS7ROL0 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x78 ;CONTROL NUMBER. MCONTS7ROL1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS7ROL1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ; MCONTS7ROL2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS7ROL2 ; MOVWF TXREG ;SEND MIDI. ; BCF GENFLAGS8, RH1L3EN ;3RD LAYER DISABLE. BRA MIDILSEND ; ;................................................................................................................. MIDI5CHK: ; MOVF MAINSBHOLD, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x00 ;Ch1. CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI5END ; MOVF MAINSBHOLD, W ; ADDLW 0x04 ;CONVERT TO Ch5. MIDI5DBJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI5DBJ1 ; MOVWF TXREG ;SEND MIDI. MIDI5DBJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI5DBJ2 ; MOVFF MAINDB1HOLD, TXREG ;SEND MIDI. MIDI5DBJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI5DBJ3 ; MOVFF MAINDB2HOLD, TXREG ;SEND MIDI. BSF GENFLAGS2, CH5MUTE_FLAG ; BCF GENFLAGS8, RH1L3EN ;RD LAYER DISABLE. MIDI5END: ; ;........................................................................ BTFSS GENFLAGS8, RH1L3EN ; BRA MIDILSEND ; MOVF MAINSBHOLD, W ; ANDLW 0x0F ;KEEP LOWEST NIBBLE. MOVWF MTEMP ; MOVLW 0x00 ;Ch1. CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI7END ; MOVF MAINSBHOLD, W ; ADDLW 0x06 ;CONVERT TO Ch7. MIDI7DBJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI7DBJ1 ; MOVWF TXREG ;SEND MIDI. MIDI7DBJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI7DBJ2 ; MOVFF MAINDB1HOLD, TXREG ;SEND MIDI. MIDI7DBJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI7DBJ3 ; MOVFF MAINDB2HOLD, TXREG ;SEND MIDI. MIDI7END: ; BRA MIDILSEND ; ;....................................................................... MIDILSEND: ; ;................................................................................................................................................................................................................ ;PERCUSSION ON Ch10 from Ch2. BTFSC GENFLAGS3, DRM1_BIT ;Percussion1 on/off bit. BRA PERC2J1 ;> BTFSC GENFLAGS8, DRM2_BIT ;Percussion2 on/off bit. BRA PERC2J1 ;> BTFSS GENFLAGS8, DRM3_BIT ;Percussion3 on/off bit. BRA MIDIPERCEND ;> PERC2J1: ; BTFSS GENFLAGS3, PERCON2_BIT ;PERC ON CH 2 ENABLE FLAG. BRA MIDI210END ;> CLRF WREG ; CPFSEQ PERCON2TIME ; BRA MIDI210END ;> ; MOVFF MAINSBHOLD, MTEMP ; MOVLW 0x91 ;NOTE ON Ch2. CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI210_OTHER ; MOVF MAINSBHOLD, W ; ADDLW 0x08 ;CONVERT TO Ch10. MIDI210DBJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI210DBJ1 ; MOVWF TXREG ;SEND MIDI. ; BTFSC GENFLAGS8, DRM2_BIT ; BRA MCHDDRM2SEL ; BTFSC GENFLAGS8, DRM3_BIT ; BRA MCHDDRM3SEL ; MOVLW 0x40 ;ATTENUATION AMOUNT. MOVWF TEMP1 ; MOVLW D'38' ;STANDARD KIT INST - (Note D2) SNARE 1. BRA MIDI210DBJ2 ; MCHDDRM2SEL: ;DRUM SELECT1 BUTTON. MOVLW 0x48 ;ATTENUATION AMOUNT. MOVWF TEMP1 ; MOVLW D'38' ;SET 2 INST - (Note) snare drum1. BRA MIDI210DBJ2 ; MCHDDRM3SEL: ;DRUM SELECT2 BUTTON. MOVLW 0x40 ;ATTENUATION AMOUNT. MOVWF TEMP1 ; MOVLW D'40' ;SET 3 INST - (Note D#2) . ; MIDI210DBJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI210DBJ2 ; MOVWF TXREG ;SEND MIDI. ; MOVF CH2DB2HOLD, W ; BZ MIDI210DBJ3 ; ; BTFSS GENFLAGS3, DRM1_BIT ;Percussion1 on/off bit. BRA MD2PJ1 ;> MOVF C1_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. BRA MD2PJND ; MD2PJ1: ; BTFSS GENFLAGS8, DRM2_BIT ;Percussion2 on/off bit. BRA MD2PJ2 ;> MOVF C2_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. BRA MD2PJND ; MD2PJ2: ; BTFSS GENFLAGS8, DRM3_BIT ;Percussion3 on/off bit. BRA MD2PJ3 ;> MOVF C3_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. MD2PJ3: ; MD2PJND: ; MULWF CHORDVOLPOT ;CHORD VOLUME LIVE VALUE. RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; ; MOVF TEMP1, W ;ATTENUATE INST1 REF INST2. MULWF PRODH ; RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; MOVF PRODH, W ; MIDI210DBJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI210DBJ3 ; MOVWF TXREG ; ; MOVLW 0xB9 ;CONTROL CH. MOVWF NORPNR1 ;Drum PITCH MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x18 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x2C ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x3A ;0x40=NO MODIFY. ;MOVF CHORDFXPOT, W ;HOLD PERCUSSION VOLUME. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ;.......... MOVF MAINSBHOLD, W ;2nd Ch10 ON Ch2 INSTRUMENT. ADDLW 0x08 ;CONVERT TO Ch10. MIDI210DBJ12: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI210DBJ12 ; MOVWF TXREG ;SEND MIDI. ; BTFSC GENFLAGS8, DRM2_BIT ; BRA MCHDDRM22SEL ; BTFSC GENFLAGS8, DRM3_BIT ; BRA MCHDDRM32SEL ; MOVLW 0x7F ;ATTENUATION AMOUNT. (7F). MOVWF TEMP1 ; MOVLW D'46' ;(Note 46 A#2) OPEN HI-HAT. BRA MIDI210DBJ22 ; MCHDDRM22SEL: ;DRUM SELECT1 BUTTON. MOVLW 0x50 ;ATTENUATION AMOUNT. MOVWF TEMP1 ; MOVLW D'37' ;(Note 37) Side stick. BRA MIDI210DBJ22 ; MCHDDRM32SEL: ;DRUM SELECT2 BUTTON. MOVLW 0x50 ;ATTENUATION AMOUNT. MOVWF TEMP1 ; MOVLW D'51' ;(Note 51) . ; MIDI210DBJ22: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI210DBJ22 ; MOVWF TXREG ;SEND MIDI. MOVF CH2DB2HOLD, W ; BZ MIDI210DBJ32 ; ; BTFSS GENFLAGS3, DRM1_BIT ;Percussion1 on/off bit. BRA MD22PJ1 ;> MOVF C1_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. BRA MD22PJND ; MD22PJ1: ; BTFSS GENFLAGS8, DRM2_BIT ;Percussion2 on/off bit. BRA MD22PJ2 ;> MOVF C2_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. BRA MD22PJND ; MD22PJ2: ; BTFSS GENFLAGS8, DRM3_BIT ;Percussion3 on/off bit. BRA MD22PJ3 ;> MOVF C3_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. MD22PJ3: ; MD22PJND: ; MULWF CHORDVOLPOT ;PERC ON Ch2 LEVEL STORE. RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; ; MOVF TEMP1, W ;ATTENUATE INSTRUMENT. MULWF PRODH ; RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; MOVF PRODH, W ; MIDI210DBJ32: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI210DBJ32 ; MOVWF TXREG ; ; MOVLW 0xB9 ;CONTROL CH. MOVWF NORPNR1 ;Drum PITCH MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x18 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x2C ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x46 ;0x40=NO MODIFY. ;MOVF CHORDFXPOT, W ;HOLD PERCUSSION VOLUME value. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW D'4' ;LOCK OUT TIME.(4 x 2ms). MOVWF PERCON2TIME ; BRA MIDIPERCEND ; ;.......... MIDI210_OTHER: ;Other than note on. MOVF MAINSBHOLD, W ; ANDLW 0x0F ; MOVWF MTEMP ; MOVLW 0x01 ;IS IT Ch2 ? CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI210END ; MOVF MAINSBHOLD, W ; ADDLW 0x08 ;CONVERT TO Ch10. MOVWF TEMP1 ; ; MOVF MAINSBHOLD, W ; ANDLW 0xF0 ; MOVWF MTEMP ; MOVLW 0xB0 ;IS IT CTRL CHNG ? CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI210JS1 ; BRA MIDIPERCEND ; MIDI210JS1: ; MOVF TEMP1, W ; MIDI210DBJ5: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI210DBJ5 ; MOVWF TXREG ;SEND MIDI. MOVF MAINDB1HOLD, W ; MIDI210DBJ6: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI210DBJ6 ; MOVWF TXREG ;SEND MIDI. MOVF MAINDB2HOLD, W ; MIDI210DBJ7: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI210DBJ7 ; MOVWF TXREG ;SEND MIDI. BRA MIDIPERCEND ; MIDI210END: ; ;...................................................................................................... PERC_ON_CH3: ;ADD PERCUSSION ON Ch10 TO Ch3 (BASS). BTFSS GENFLAGS3, PERCON3_BIT ; BRA MIDI310END ; CLRF WREG ; CPFSEQ PERCON3TIME ; BRA MIDI310END ; ; MOVFF MAINSBHOLD, MTEMP ; MOVLW 0x92 ;NOTE ON Ch3. CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI310_OTHER ;OTHER THAN NOTE ON. MOVF MAINSBHOLD, W ; ADDLW 0x07 ;CONVERT TO Ch10. MIDI310DBJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI310DBJ1 ; MOVWF TXREG ;SEND MIDI. ; BTFSC GENFLAGS8, DRM2_BIT ; BRA MBASDRM2SEL ; BTFSC GENFLAGS8, DRM3_BIT ; BRA MBASDRM3SEL ; MOVLW 0x50 ;ATTENUATION AMOUNT. MOVWF TEMP1 ; MOVLW D'35' ;SET1 KIT INST-(Note B1) KICK DRUM2. BRA MIDI310DBJ2 ; MBASDRM2SEL: ; MOVLW 0x50 ;ATTENUATION AMOUNT. MOVWF TEMP1 ; MOVLW D'35' ;SET 2 INST-(Note E2) JAZZ BD2. BRA MIDI310DBJ2 ; MBASDRM3SEL: ; MOVLW 0x69 ;ATTENUATION AMOUNT. MOVWF TEMP1 ; MOVLW D'36' ;SET 3 INST-(Note C2) JAZZ BD1. ; MIDI310DBJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI310DBJ2 ; MOVWF TXREG ;SEND MIDI. MOVF CH3DB2HOLD, W ; BZ MIDI310DBJ3 ; ; BTFSS GENFLAGS3, DRM1_BIT ;Percussion1 on/off bit. BRA MD3PJ1 ;> MOVF B1_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. BRA MD3PJND ; MD3PJ1: ; BTFSS GENFLAGS8, DRM2_BIT ;Percussion2 on/off bit. BRA MD3PJ2 ;> MOVF B2_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. BRA MD3PJND ; MD3PJ2: ; BTFSS GENFLAGS8, DRM3_BIT ;Percussion3 on/off bit. BRA MD3PJ3 ;> MOVF B3_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. MD3PJ3: ; MD3PJND: ; MULWF BASSVOLPOT ;PERC ON Ch3 LEVEL STORE. RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; ; MOVF TEMP1, W ;ATTENUATE INST1 REF INST2. MULWF PRODH ; RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; MOVF PRODH, W ; MIDI310DBJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. MOVWF TXREG ;SEND MIDI. ;...... MOVF MAINSBHOLD, W ;2nd Ch10 ON Ch3 INSTRUMENT. ADDLW 0x07 ;CONVERT TO Ch10. MIDI310DBJ4: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI310DBJ4 ; MOVWF TXREG ;SEND MIDI. ; BTFSC GENFLAGS8, DRM2_BIT ; BRA MBASDRM22SEL ; BTFSC GENFLAGS8, DRM3_BIT ; BRA MBASDRM32SEL ; MOVLW 0x7F ;ATTENUATION AMOUNT. (7F). MOVWF TEMP1 ; MOVLW D'46' ;SET1 KIT INST - BRA MIDI310DBJ5 ; (Note 46 A#2) OPEN HI-HAT. MBASDRM22SEL: ; MOVLW 0x48 ;ATTENUATION AMOUNT. MOVWF TEMP1 ; MOVLW D'41' ;SET 2 INST-(Note ) RIDE BELL. BRA MIDI310DBJ5 ; MBASDRM32SEL: ; MOVLW 0x70 ;ATTENUATION AMOUNT. MOVWF TEMP1 ; MOVLW D'59' ;SET 3 INST-(Note )RIDE CYMBAL 2. ; MIDI310DBJ5: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI310DBJ5 ; MOVWF TXREG ;SEND MIDI. MOVF CH3DB2HOLD, W ; BZ MIDI310DBJ6 ; ; BTFSS GENFLAGS3, DRM1_BIT ;Percussion1 on/off bit. BRA MD33PJ1 ;> MOVF B1_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. BRA MD33PJND ; MD33PJ1: ; BTFSS GENFLAGS8, DRM2_BIT ;Percussion2 on/off bit. BRA MD33PJ2 ;> MOVF B2_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. BRA MD33PJND ; MD33PJ2: ; BTFSS GENFLAGS8, DRM3_BIT ;Percussion3 on/off bit. BRA MD33PJ3 ;> MOVF B3_PERCVOL, W ;PERCUSSION VOLUME LEVEL HOLD. MD33PJ3: ; MD33PJND: ; MULWF BASSVOLPOT ;PERC ON Ch3 LEVEL STORE. RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; ; MOVF TEMP1, W ;ATTENUATE INST1 REF INST2. MULWF PRODH ; RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; MOVF PRODH, W ; MIDI310DBJ6: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. MOVWF TXREG ;SEND MIDI. ; MOVLW D'1' ;LOCK OUT TIME.(1 x 2ms). MOVWF PERCON3TIME ; BRA MIDIPERCEND ; ;........ MIDI310_OTHER: ;Other than note on. MOVF MAINSBHOLD, W ; ANDLW 0x0F ; MOVWF MTEMP ; MOVLW 0x02 ;IS IT Ch3 ? CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI310END ; MOVF MAINSBHOLD, W ; ADDLW 0x07 ;CONVERT TO Ch10. MOVWF TEMP1 ; ; MOVF MAINSBHOLD, W ;NO CONTROL CHANGES ON PERC. ANDLW 0xF0 ; MOVWF MTEMP ; MOVLW 0xB0 ;IS IT CTRL CHNG ? CPFSEQ MTEMP ;SKIP IF f=W. BRA MIDI310JS1 ; BRA MIDIPERCEND ; MIDI310JS1: ; MOVF TEMP1, W ; MIDI310PJ5: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI310PJ5 ; MOVWF TXREG ;SEND MIDI. MOVF MAINDB1HOLD, W ; MIDI310PJ6: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI310PJ6 ; MOVWF TXREG ;SEND MIDI. MOVF MAINDB2HOLD, W ; MIDI310PJ7: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI310PJ7 ; MOVWF TXREG ;SEND MIDI. MIDI310END: ; ; MIDIPERCEND: ;END OF LEFT-HAND MANUAL PERCUSSION. ;.................................................................... ;MOVLW 0xB9 ;CONTROL CH10. ;MOVWF NORPNR1 ;tune MODIFY. ;MOVLW 0x63 ; ;MOVWF NORPNR2 ; ;MOVLW 0x18 ; ;MOVWF NORPNR3 ; ;MOVLW 0x62 ; ;MOVWF NORPNR4 ; ;MOVLW d'46' ;Note. ;MOVWF NORPNR5 ; ;MOVLW 0x06 ; ;MOVWF NORPNR6 ; ;MOVF BASSFXPOT, W ;TUNE. 0x40=NO MODIFY. ;MOVWF NORPNR7 ; ;CALL NORPN7BYTE ; ; ;.......................................................................................................................................................................... MIDI2END: ; BCF MIDISTAT2, SEND2DB_FLAG ;2DB MESSAGE READY. ;BRA MIDINTXIT ; ;............................................................................... ;............................................................................... MIDIRSTST: ; ;.................................... MIDINTXIT: ; ;.................................................................... MIDIEXIT: ; ;.................................................................... AEDITSND: ;CALL SOUNDEDIT ;TEST MODE SOUND EDIT CONTROLS ???. ;...................................................................................................... RETURN ;END OF MIDI SORTING ROUTINE. ;======================================================================================================== ;********************************************************************************************************************************************************************** PROGCHNGSEND: ;BANK SELECT THEN PROGRAM CHANGE. BTFSC PROGCHHOLD2, 7 ;BAIL OUT IF GREATER THAN 0x7F, AS BRA PROGCHNGSNDEND ;IT IS A BLANK SPACE. PROGCHNG1: ;............................ MOVLW 0xB0 ;BANK SELECT MSB. PROGCHSNDW0: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA PROGCHSNDW0 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ;0=GM. BANK SELECT. PROGCHSNDW00: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA PROGCHSNDW00 ; MOVWF TXREG ;SEND MIDI. ; MOVLW 0xFD ;EEPROM BANK MSB ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. PROGCHSNDW01: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA PROGCHSNDW01 ; MOVWF TXREG ;SEND MIDI................... MOVLW 0xB0 ;BANK SELECT LSB. PROGCHSNDW02: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA PROGCHSNDW02 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x20 ;0=GM. BANK SELECT. PROGCHSNDW03: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA PROGCHSNDW03 ; MOVWF TXREG ;SEND MIDI. ; MOVLW 0xFC ;EEPROM BANKLSB ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. PROGCHSNDW04: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA PROGCHSNDW04 ; MOVWF TXREG ;SEND MIDI. ;.................................... PROGCHNGDIR: ; MOVF PROGCHHOLD1, W ;PROG CHANGE CHANNEL. PROGCHSNDW1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA PROGCHSNDW1 ; MOVWF TXREG ;SEND MIDI. ; MOVF PROGCHHOLD2, W ;PROG CHANGE INSTRUMENT NUMBER. PROGCHSNDW2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA PROGCHSNDW2 ; MOVWF TXREG ;SEND MIDI. PROGCHNGSNDEND: ; RETURN ; ;*********************************************************************************************************************************************************************** POTSCAN: ;DOES 1 POT SCAN FOR EACH CALL HERE. BSF ADCON0, GO ;START A/D. DECFSZ POTSCNCNT ; BRA POTLOOP1 ; MOVLW 0x08 ;RELOAD POT LOOP COUNTER. MOVWF POTSCNCNT ; ;............................................................................................................................................................. POTLOOP1: ; MOVLW 0x08 ; CPFSEQ POTSCNCNT ; BRA POTLOOP2 ; POT1J1: ;BASS VOL POT. BTFSC ADCON0, GO ; BRA POT1J1 ; RRNCF ADRESH, F ;RUNNING AVERAGE FILTER. RRNCF ADRESH, F ; RRNCF ADRESH, F ; MOVLW 0x1F ; ANDWF ADRESH, F ;DIVIDE INPUT BY 8. ; RRNCF POT1FILT, W ; RRNCF WREG, F ; RRNCF WREG, F ; MOVWF TEMPS ; MOVLW 0x1F ; ANDWF TEMPS, W ;FIND 1/8th OF STORED VALUES. ; SUBWF POT1FILT, W ;SUBTRACT 1/8 OF STORED VALUE FROM STORED VALUE. ADDWF ADRESH, W ;ADD 1/8th OF INPUT VALUE. MOVWF POT1FILT ;THIS IS THE NEW WHOLE STORED VALUE. BCF STATUS, C ; RRCF WREG, F ;DIVIDE OUTPUT BY 2 FOR MIDI SCALING (0x7F, 128 MAX). ; MOVWF SCANTEMP1 ; XORWF BASSVOLPOT, W ; MOVFF SCANTEMP1, BASSVOLPOT ; BZ POT12SET ; BSF POTSTAT, 6 ;POT_SEND_FLAG ; MOVF BASSVOLPOT, W ; SUBLW 0x7F ;(1-Vin). MOVWF BASSVOLPOT ; MULWF BASSVOLPOT ;(1-Vin)*(1-Vin) RLNCF PRODH, F ;SCALE. MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; ; MOVF PRODH, W ; MULWF BASSVOLPOT ; RLNCF PRODH, F ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; ; MOVF PRODH, W ; SUBLW 0x7F ;1-[(1-Vin)*(1-Vin)] = Vin^2-2Vin. MOVWF POTSTORE ; MOVFF SCANTEMP1, BASSVOLPOT ;PUT SCANNED VALUE BACK IN BASSVOLPOT. ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF POTCHAN ; MOVLW 0x07 ;VOL = CONTROL 07. MOVWF POTCONT ; POT12SET: ; MOVLW B'10111001' ;01 XXX 001. AN7 = BASS Fx. MOVWF ADCON0 ;SELECT CHAN. BRA POTEXIT ;LEAVES SAMPLE/HOLD TIME. ;............................................................................. POTLOOP2: ; MOVLW 0x07 ; CPFSEQ POTSCNCNT ; BRA POTLOOP3 ; POT2J1: ;BASS Fx POT. BTFSC ADCON0, GO ;WAIT FOR A/D TO FINISH. BRA POT2J1 ; RRNCF ADRESH, F ;RUNNING AVERAGE FILTER. RRNCF ADRESH, F ; RRNCF ADRESH, F ; MOVLW 0x1F ; ANDWF ADRESH, F ;DIVIDE INPUT BY 8. ; RRNCF POT2FILT, W ; RRNCF WREG, F ; RRNCF WREG, F ; MOVWF TEMPS ; MOVLW 0x1F ; ANDWF TEMPS, W ;FIND 1/8th OF STORED VALUES. ; SUBWF POT2FILT, W ;SUBTRACT 1/8 OF STORED VALUE FROM STORED VALUE. ADDWF ADRESH, W ;ADD 1/8th OF INPUT VALUE. MOVWF POT2FILT ;THIS IS THE NEW WHOLE STORED VALUE. BCF STATUS, C ; RRCF WREG, F ;DIVIDE OUTPUT BY 2 FOR MIDI SCALING (0x7F, 127 MAX). ; MOVWF SCANTEMP1 ; XORWF BASSFXPOT, W ;SET STATUS FLAGS. MOVFF SCANTEMP1, BASSFXPOT ; BZ POT23SET ; ;............................................................................... BTFSS GENFLAGS12, BENDVOLED_BIT ;BEND EDIT MODE TEST. BRA POT23J01 ; MOVF BASSFXPOT, W ;BEND RECOVERY TIME (ALL 8 BITS). MOVWF PBTIMEHOLD ; MOVLW 0x03 ; CPFSGT PBTIMEHOLD ;SKIP IF F>W. CLRF PBTIMEHOLD ;MAKE AN END STOP IF LESS THAN 04. MOVF PBTIMEHOLD, W ; SUBLW 0x7F ;REVERSE POT ACTION. MOVWF BENDTIMPOT ; ; BSF GENFLAGS10, DIP_CHNG_LED ;Dip control change led. BRA POT23SET ;BYPASS BASS Fx SEND. ; POT23J01: ;.................................................................. BTFSS GENFLAGS11, SOLOVOLED_BIT ;SOLO EDIT MODE TEST. BRA POT23J001 ; MOVFF BASSFXPOT, SOLOVAL ; MOVFF BASSFXPOT, SOLOVALPOT ;HOLD VALUE TO SEND TO EEPROM. CALL SEND_EXPR ;SEND EXPRESSION (SOLO) VALUES. BSF GENFLAGS10, DIP_CHNG_LED ;Dip control change led. BRA POT23SET ;BYPASS BASS Fx SEND. ; POT23J001: ;.................................................................. BTFSS GENFLAGS3, PERCVOLED_BIT ;PERCUSSION EDIT MODE TEST. BRA POT23J1 ; MOVF BASSFXPOT, W ;HOLD PERCUSSION VOLUME. ; BTFSS GENFLAGS3, DRM1_BIT ;Percussion1 on/off bit. BRA POT2PJ1 ;> MOVWF B1_PERCVOL ;PERCUSSION VOLUME LEVEL HOLD. BRA POT2PJND ; POT2PJ1: ; BTFSS GENFLAGS8, DRM2_BIT ;Percussion2 on/off bit. BRA POT2PJ2 ;> MOVWF B2_PERCVOL ;PERCUSSION VOLUME LEVEL HOLD. BRA POT2PJND ; POT2PJ2: ; BTFSS GENFLAGS8, DRM3_BIT ;Percussion3 on/off bit. BRA POT2PJ3 ;> MOVWF B3_PERCVOL ;PERCUSSION VOLUME LEVEL HOLD. POT2PJ3: ; POT2PJND: ;............................................... BSF GENFLAGS10, DIP_CHNG_LED ;Dip control change led. BRA POT23SET ;BYPASS BASS Fx SEND. POT23J1: ; BSF POTSTAT, 7 ;POT_SEND_FLAG MOVFF BASSFXPOT, POTSTORE ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF POTCHAN ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF POTCONT ; POT23SET: ; MOVLW B'10101001' ;01 XXX 001. AN5 = . MOVWF ADCON0 ;SELECT CHAN. BRA POTEXIT ;LEAVES SAMPLE/HOLD TIME. ;............................................................................. POTLOOP3: ; MOVLW 0x06 ; CPFSEQ POTSCNCNT ; BRA POTLOOP4 ; POT3J1: ; BTFSC ADCON0, GO ;CHORD VOL. BRA POT3J1 ; RRNCF ADRESH, F ;RUNNING AVERAGE FILTER. RRNCF ADRESH, F ; RRNCF ADRESH, F ; MOVLW 0x1F ; ANDWF ADRESH, F ;DIVIDE INPUT BY 8. ; RRNCF POT3FILT, W ; RRNCF WREG, F ; RRNCF WREG, F ; MOVWF TEMPS ; MOVLW 0x1F ; ANDWF TEMPS, W ;FIND 1/8th OF STORED VALUES. ; SUBWF POT3FILT, W ;SUBTRACT 1/8 OF STORED VALUE FROM STORED VALUE. ADDWF ADRESH, W ;ADD 1/8th OF INPUT VALUE. MOVWF POT3FILT ;THIS IS THE NEW WHOLE STORED VALUE. BCF STATUS, C ; RRCF WREG, F ;DIVIDE OUTPUT BY 2 FOR MIDI SCALING (0x7F, 128 MAX). ; MOVWF SCANTEMP1 ; XORWF CHORDVOLPOT, 0 ; MOVFF SCANTEMP1, CHORDVOLPOT ; BZ POT34SET ; BSF POTSTAT, 5 ;POT_SEND_FLAG ; MOVF CHORDVOLPOT, W ; SUBLW 0x7F ; MOVWF CHORDVOLPOT ; MULWF CHORDVOLPOT ; RLNCF PRODH, 1 ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; ; ;MOVF PRODH, W ; ;MULWF CHORDVOLPOT ; ;RLNCF PRODH, 1 ; ;MOVLW 0xFF ; ;CPFSLT PRODL ; ;BSF PRODH, 0 ; ; MOVF PRODH, W ; SUBLW 0x7F ;1-[(1-Vin)*(1-Vin)] = Vin^2-2Vin. MOVWF POTSTORE ; MOVFF SCANTEMP1, CHORDVOLPOT ;PUT SCANNED VALUE BACK IN CHORDVOLPOT. ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF POTCHAN ; MOVLW 0x07 ;VOL = CONTROL 07. MOVWF POTCONT ; POT34SET: ; MOVLW B'10100001' ;01 XXX 001. MOVWF ADCON0 ;SELECT CHAN. BRA POTEXIT ;LEAVES SAMPLE/HOLD TIME. ;............................................................................. POTLOOP4: ; MOVLW 0x05 ; CPFSEQ POTSCNCNT ; BRA POTLOOP5 ; POT4J1: ;CHORDS Fx CONTROL. BTFSC ADCON0, GO ; BRA POT4J1 ; RRNCF ADRESH, F ;RUNNING AVERAGE FILTER. RRNCF ADRESH, F ; RRNCF ADRESH, F ; MOVLW 0x1F ; ANDWF ADRESH, F ;DIVIDE INPUT BY 8. ; RRNCF POT4FILT, W ; RRNCF WREG, F ; RRNCF WREG, F ; MOVWF TEMPS ; MOVLW 0x1F ; ANDWF TEMPS, W ;FIND 1/8th OF STORED VALUES. ; SUBWF POT4FILT, W ;SUBTRACT 1/8 OF STORED VALUE FROM STORED VALUE. ADDWF ADRESH, W ;ADD 1/8th OF INPUT VALUE. MOVWF POT4FILT ;THIS IS THE NEW WHOLE STORED VALUE. BCF STATUS, C ; RRCF WREG, F ;DIVIDE OUTPUT BY 2 FOR MIDI SCALING (0x7F, 128 MAX). ; MOVWF SCANTEMP1 ; XORWF CHORDFXPOT, 0 ; MOVFF SCANTEMP1, CHORDFXPOT ; BZ POT45SET ; ;............................................................................... BTFSS GENFLAGS12, BENDVOLED_BIT ;BEND EDIT MODE TEST. BRA POT4J001 ; MOVF CHORDFXPOT, W ; BCF STATUS, C ; RRCF WREG, F ;DIVIDE OUTPUT BY 2 FOR MIDI SCALING (0x40 CENTRE FOR PBEND). MOVWF BENDVALPOT ; ; MOVF BENDVALPOT, W ; MOVWF C1_PERCVOL ;PERCUSSION VOLUME LEVEL HOLD. BRA POT4PJND ; POT4PJ1: ; BTFSS GENFLAGS8, DRM2_BIT ;Percussion2 on/off bit. BRA POT4PJ2 ;> MOVWF C2_PERCVOL ;PERCUSSION VOLUME LEVEL HOLD. BRA POT4PJND ; POT4PJ2: ; BTFSS GENFLAGS8, DRM3_BIT ;Percussion3 on/off bit. BRA POT4PJ3 ;> MOVWF C3_PERCVOL ;PERCUSSION VOLUME LEVEL HOLD. POT4PJ3: ; POT4PJND: ; BSF GENFLAGS10, DIP_CHNG_LED ;Dip control change led. BRA POT45SET ;BYPASS BASS Fx SEND. POT4J01: ; ;............................................................................. BSF POTSTAT, 4 ;POT_SEND_FLAG MOVFF CHORDFXPOT, POTSTORE ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF POTCHAN ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF POTCONT ; POT45SET: ; MOVLW B'10011001' ;01 XXX 001. MOVWF ADCON0 ;SELECT CHAN. BRA POTEXIT ;LEAVES SAMPLE/HOLD TIME. ;................................................................................................................................................................................ POTLOOP5: ; MOVLW 0x04 ; CPFSEQ POTSCNCNT ; BRA POTLOOP6 ; POT5J1: ; BTFSC ADCON0, GO ;RH1 VOL CONTROL. BRA POT5J1 ; RRNCF ADRESH, F ;RUNNING AVERAGE FILTER. RRNCF ADRESH, F ; RRNCF ADRESH, F ; MOVLW 0x1F ; ANDWF ADRESH, F ;DIVIDE INPUT BY 8. ; RRNCF POT5FILT, W ; RRNCF WREG, F ; RRNCF WREG, F ; MOVWF TEMPS ; MOVLW 0x1F ; ANDWF TEMPS, W ;FIND 1/8th OF STORED VALUES. ; SUBWF POT5FILT, W ;SUBTRACT 1/8 OF STORED VALUE FROM STORED VALUE. ADDWF ADRESH, W ;ADD 1/8th OF INPUT VALUE. MOVWF POT5FILT ;THIS IS THE NEW WHOLE STORED VALUE. BCF STATUS, C ; RRCF WREG, F ;DIVIDE OUTPUT BY 2 FOR MIDI SCALING (0x7F, 128 MAX). ; MOVWF SCANTEMP1 ; XORWF RH1VOLPOT, 0 ; MOVFF SCANTEMP1, RH1VOLPOT ; BZ POT56SET ; BSF POTSTAT, 3 ;POT_SEND_FLAG ; MOVF RH1VOLPOT, W ; SUBLW 0x7C ; MOVWF RH1VOLPOT ; MULWF RH1VOLPOT ; RLNCF PRODH, 1 ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; MOVF PRODH, W ; SUBLW 0x7F ;1-[(1-Vin)*(1-Vin)] = Vin^2-2Vin. MOVWF POTSTORE ; MOVFF SCANTEMP1, RH1VOLPOT ;PUT SCANNED VALUE BACK IN RH1VOLPOT. ; MOVLW 0xB0 ;RIGHT-HAND CHANNEL 1. MOVWF POTCHAN ; MOVLW 0x07 ;VOL = CONTROL 07. MOVWF POTCONT ; POT56SET: ; MOVLW B'10010001' ;01 XXX 001. MOVWF ADCON0 ;SELECT CHAN. BRA POTEXIT ;LEAVES SAMPLE/HOLD TIME. ;............................................................................. POTLOOP6: ;RH1 Fx POT. MOVLW 0x03 ; CPFSEQ POTSCNCNT ; BRA POTLOOP7 ; POT6J1: ; BTFSC ADCON0, GO ; BRA POT6J1 ; RRNCF ADRESH, F ;RUNNING AVERAGE FILTER. RRNCF ADRESH, F ; RRNCF ADRESH, F ; MOVLW 0x1F ; ANDWF ADRESH, F ;DIVIDE INPUT BY 8. ; RRNCF POT6FILT, W ; RRNCF WREG, F ; RRNCF WREG, F ; MOVWF TEMPS ; MOVLW 0x1F ; ANDWF TEMPS, W ;FIND 1/8th OF STORED VALUES. ; SUBWF POT6FILT, W ;SUBTRACT 1/8 OF STORED VALUE FROM STORED VALUE. ADDWF ADRESH, W ;ADD 1/8th OF INPUT VALUE. MOVWF POT6FILT ;THIS IS THE NEW WHOLE STORED VALUE. BCF STATUS, C ; RRCF WREG, F ;DIVIDE OUTPUT BY 2 FOR MIDI SCALING (0x7F, 128 MAX). ; MOVWF SCANTEMP1 ; XORWF RH1FXPOT, W ; MOVFF SCANTEMP1, RH1FXPOT ; BZ POT67SET ; ;...................................................................... BTFSS GENFLAGS7, TREMVOLED_BIT ;TREMOLO EDIT MODE TEST. BRA POT6J2 ; ; MOVF RH1FXPOT, W ; MOVWF TREMDEPTH ;HOLD TREMOLO DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG ; MOVLW 0x27 ;SELECT CHANNEL 1! MOVWF SYSX11BYTE7 ; MOVLW 0x26 ;SELECT TREM DEPTH. MOVWF SYSX11BYTE8 ; MOVLW 0x7F ;MOD DEPTH VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG ; MOVLW 0x21 ;SELECT CHANNEL 1! MOVWF SYSX11BYTE7 ; MOVLW 0x26 ;SELECT TREM DEPTH. MOVWF SYSX11BYTE8 ; MOVLW 0x7F ;MOD DEPTH VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG ; MOVLW 0x25 ;SELECT CHANNEL 5! MOVWF SYSX11BYTE7 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG ; MOVLW 0x24 ;SELECT CHANNEL 4! MOVWF SYSX11BYTE7 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; ; MOVLW 0xD0 ;CHAN PRESSURE CH1. TREM10: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA TREM10 ; MOVWF TXREG ;SEND MIDI. MOVF TREMDEPTH, W ;DATA BYTE. TREM11: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA TREM11 ; MOVWF TXREG ;SEND MIDI. ; MOVLW 0xD4 ;CHAN PRESSURE CH5. TREM20: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA TREM20 ; MOVWF TXREG ;SEND MIDI. MOVF TREMDEPTH, W ;DATA BYTE. TREM21: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA TREM21 ; MOVWF TXREG ;SEND MIDI. ; MOVLW 0xD3 ;CHAN PRESSURE CH4. TREM30: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA TREM30 ; MOVWF TXREG ;SEND MIDI. MOVF TREMDEPTH, W ;DATA BYTE. TREM31: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA TREM31 ; MOVWF TXREG ;SEND MIDI. ; MOVLW 0xD6 ;CHAN PRESSURE CH7. TREM40: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA TREM40 ; MOVWF TXREG ;SEND MIDI. MOVF TREMDEPTH, W ;DATA BYTE. TREM41: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA TREM41 ; MOVWF TXREG ;SEND MIDI. ;................................................................. BSF GENFLAGS10, DIP_CHNG_LED ;Dip control change led. BRA POT67SET ;BYPASS RH1 Fx SEND. POT6J2: ;................................................................... BSF POTSTAT, 2 ;POT_SEND_FLAG MOVFF RH1FXPOT, POTSTORE ; MOVLW 0xB0 ;RIGHT-HAND CHANNEL 1. MOVWF POTCHAN ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF POTCONT ; POT67SET: ; MOVLW B'10001001' ;01 XXX 001. MOVWF ADCON0 ;SELECT CHAN. BRA POTEXIT ;LEAVES SAMPLE/HOLD TIME. ;........................................................................................................................................................................................ POTLOOP7: ; MOVLW 0x02 ; CPFSEQ POTSCNCNT ; BRA POTLOOP8 ; POT7J1: ;RH2 Fx POT. BTFSC ADCON0, GO ; BRA POT7J1 ; RRNCF ADRESH, F ;RUNNING AVERAGE FILTER. RRNCF ADRESH, F ; RRNCF ADRESH, F ; MOVLW 0x1F ; ANDWF ADRESH, F ;DIVIDE INPUT BY 8. ; RRNCF POT7FILT, W ; RRNCF WREG, F ; RRNCF WREG, F ; MOVWF TEMPS ; MOVLW 0x1F ; ANDWF TEMPS, W ;FIND 1/8th OF STORED VALUES. ; SUBWF POT7FILT, W ;SUBTRACT 1/8 OF STORED VALUE FROM STORED VALUE. ADDWF ADRESH, W ;ADD 1/8th OF INPUT VALUE. MOVWF POT7FILT ;THIS IS THE NEW WHOLE STORED VALUE. BCF STATUS, C ; RRCF WREG, F ;DIVIDE OUTPUT BY 2 FOR MIDI SCALING (0x7F, 128 MAX). ; MOVWF SCANTEMP1 ; XORWF RH2FXPOT, 0 ; MOVFF SCANTEMP1, RH2FXPOT ; BZ POT78SET ; ;....................................................................... BTFSS GENFLAGS7, TREMVOLED_BIT ;TREMOLO EDIT MODE TEST. BRA POT7J2 ; ; MOVLW 0x0F ; CPFSLT RH2FXPOT ;SKIP IF F ;........................................................................ BENDLOEDJ1: ;Once button pressed once enter here. BTFSS RH11_ON_FLAGS, 7 ; BRA BENDEDJ2 ; BRA BENDINJ1 ; BENDEDJ2: ; BCF GENFLAGS12, BENDTERM_BIT ; ; BTFSC GENFLAGS12, BENDWAIT_BIT ;NOW IN EDIT MODE. BRA BEND_FLSH_LEDS ; TSTFSZ DRM1EDTIME ;HAS BUTTON BEEN HELD DOWN ENOUGH. BRA BENDSCANORM ;NO, NOT LONG ENOUGH YET. BSF GENFLAGS12, BENDVOLED_BIT ;BEND EDIT MODE SET. BSF GENFLAGS12, BENDWAIT_BIT ;SET EDIT MODE ON. ; BEND_FLSH_LEDS: ;.......................................... BTFSC GENFLAGS3, PERCVOLED_BIT ;PERC EDIT MODE IS ON. BRA BEND_ED_CLR ;EXIT BEND EDIT IF PERC EDIT MODE ATTEMPTED. BTFSC GENFLAGS7, TREMVOLED_BIT ;TREM EDIT MODE IS ON. BRA BEND_ED_CLR ;EXIT BEND EDIT IF TREM EDIT MODE ATTEMPTED. BTFSC GENFLAGS11, SOLOVOLED_BIT ; BRA BEND_ED_CLR ;EXIT BEND EDIT IF SOLO EDIT MODE ATTEMPTED. ; TSTFSZ MTUNFLASH ; BRA BENDSCANJ2 ; BTG DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. BTG DISPLAYREG, CHORDBANK ;BASSSOCTBIT=1=BANK B. LED IS OFF. MOVLW D'20' ;LED FLASH RATE (x2ms.) MOVWF MTUNFLASH ; BENDSCANJ2: ; BRA BEND_ED_END ;EXIT > ;................................................................................................ BENDINJ1: ; BTFSC GENFLAGS12, BENDTERM_BIT ; BRA BENDTERM1 ; MOVLW D'100' ;Button ACTIVATE INTERVAL.(x10ms). MOVWF PBBUTTIME ;START BUTTON EXIT TIMER. BSF GENFLAGS12, BENDTERM_BIT ; BENDTERM1: ; TSTFSZ PBBUTTIME ; BRA BENDTERM3 ; BRA BENDTERM2 ; ;................................................................................................ BENDTERM3: ; TSTFSZ MTUNFLASH ; BRA BENDTERM3J1 ; BTG DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. BTG DISPLAYREG, CHORDBANK ;BASSSOCTBIT=1=BANK B. LED IS OFF. MOVLW D'20' ;LED FLASH RATE (x2ms.) MOVWF MTUNFLASH ; BENDTERM3J1: ; BRA BEND_ED_END ;EXIT > ;................................................................................................ BENDTERM2: ; MOVF BENDVALPOT, W ;BEND VOLUME LEVEL. MOVWF EEDATA ;VALUE TO WRITE TO EEPROM. MOVLW 0xE8 ;PB AMOUNT. MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; MOVF BENDTIMPOT, W ;BEND VOLUME LEVEL. MOVWF EEDATA ;VALUE TO WRITE TO EEPROM. MOVLW 0xE9 ;PB TIME. MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; BEND_ED_CLR: ; BTFSS GENFLAGS1, BASSOCTBIT ; BSF DISPLAYREG, BASSBANK ;BASSOCTBIT=0=BANK A. LED IS ON. BTFSC GENFLAGS1, BASSOCTBIT ; BCF DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. ; BTFSS GENFLAGS1, CHORDOCTBIT ; BSF DISPLAYREG, CHORDBANK ;BASSOCTBIT=0=BANK A. LED IS ON. BTFSC GENFLAGS1, CHORDOCTBIT ; BCF DISPLAYREG, CHORDBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. ; BCF GENFLAGS12, BENDVOLED_BIT ;BEND EDIT MODE IS NOW OFF. BCF GENFLAGS12, BENDTOG_FLAG ;FIRST TIME IN FLAG. BCF GENFLAGS12, BENDWAIT_BIT ;SET EDIT MODE OFF. BSF DISPLAYREG, GREEN ;RESET (TURN ON) GREEN LED. BCF GENFLAGS12, BENDTERM_BIT ; ; BENDSCANORM: ; BTFSS RH11_OFF_FLAGS, 7 ; BRA BEND_ED_END ; BCF RH11_OFF_FLAGS, 7 ; BCF GENFLAGS12, BENDVOLED_BIT ;BEND EDIT MODE IS NOW OFF. BCF GENFLAGS12, BENDTOG_FLAG ;FIRST TIME IN FLAG. BSF DISPLAYREG, GREEN ;RESET (TURN ON) GREEN LED. BCF GENFLAGS12, BENDTERM_BIT ; ;.................................................... BEND_ED_END: ; ;................................................................................................................................................................................................................ PB_OFF: ;PITCH-BEND RISE ROUTINE. BTFSS GENFLAGS8, PB_EN_BIT ; BRA PBOFF_END ;> ; MOVLW 0x08 ;RB3, ENABLE RH11 BUSS. MOVWF PORTB ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ;TO WREG. CLRF PORTB ; BTFSC WREG, 7 ; BRA PBOFF_END ;HOLDS PB PITCH DOWN. ; MOVF PORTC, W ; MOVWF PEDTEMP ; BTFSS FSW1ASIGNREG11, FSW1_RH118_BIT; BRA PB118J1 ; ANDLW 0x02 ;ASSIGN FSW1. BZ PB118J1 ; BRA PBOFF_END ; PB118J1: ; BTFSS FSW2ASIGNREG11, FSW2_RH118_BIT; BRA PB118J2 ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ PB118J2 ; BRA PBOFF_END ; PB118J2: ; BTFSS FSW3ASIGNREG11, FSW3_RH118_BIT; BRA PB118J3 ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ PB118J3 ; BRA PBOFF_END ; PB118J3: ; BTFSS FSW4ASIGNREG11, FSW4_RH118_BIT; BRA PB118J4 ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ PB118J4 ; BRA PBOFF_END ; PB118J4: ;................................................................................. BTFSC GENFLAGS8, PBHOLD_BIT ; BRA PBRECOVER ; BSF GENFLAGS8, PBHOLD_BIT ; ; MOVFF PB_DEPTH_HI, PB_DEC_HI ;RELOAD. MOVFF PB_DEPTH_LO, PB_DEC_LO ; PBRECOVER: ; MOVF BENDTIMPOT, W ; ADDWF PB_DEC_LO, F ; BTFSS PB_DEC_LO, 7 ;EFFECTIVE CARRY. BRA PBOFFSJ1 ; CLRF PB_DEC_LO ; INCF PB_DEC_HI ; BTFSC PB_DEC_HI, 6 ;40h IS EFFECTIVE CENTRE. ( 40h, 00h. 14 BIT MIDI RESOLOUTION). BRA PB_RESET ; PBOFFSJ1: ; BCF PORTC, 3 ;ENABLE LED COM BUSS. MOVFF DISPLAYREG, PORTB ;REDUCE LED FLICKER DURING MIDI ; SENDS. MOVFF PB_DEC_LO, BYTE2OF3 ; MOVFF PB_DEC_HI, BYTE3OF3 ; ; MOVLW 0xE3 ;PITCH BEND CHANNEL 4. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xE0 ;PITCH BEND CHANNEL 1. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xE4 ;PITCH BEND CHANNEL 5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xE6 ;PITCH BEND CHANNEL 7. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; BSF PORTC, 3 ;DISABLE LED COM BUSS. PBOFF_RECEND: ; BRA PBOFF_END ; ;................................................................................................................................ PB_RESET: ; MOVLW 0xE3 ;PITCH BEND CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x00 ;LSBYTE MOVWF BYTE2OF3 ; MOVLW 0x40 ;MS BYTE : CENTRE IS 00h 40h. MOVWF BYTE3OF3 ;RESET TO CENTER VALUE. CALL MIDI3BYTE ; ; MOVLW 0xE0 ;PITCH BEND CHANNEL 1. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; BCF GENFLAGS8, PB_EN_BIT ; BCF GENFLAGS8, PBHOLD_BIT ; ; MOVLW 0xE4 ;PITCH BEND CHANNEL 5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xE6 ;PITCH BEND CHANNEL 7. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; PBOFF_END: ; ;................................................................................................................................................................................................................ TSTFSZ SCANDEL ;BUTTONS LOCKOUT TIME. GOTO SCANEXIT ; ;_______________________________________________________________________________________________________________________ DRUMS1_VOL_EDIT: ;DRUMS1 BUTTON HOLD ROUTINE. BTFSC GENFLAGS11, SOLOVOLED_BIT ;SOLO EDIT MODE TEST. BRA DRMEDEND ;BYPASS DRUMS EDIT IF SOLO EDIT IS IN PROGRESSS. ; BTFSC GENFLAGS9, DRM1TOG_FLAG ; BRA DRM1EDJ1 ; BEEN IN ONCE ALREADY. TIMER STARTED. ; BTFSS RH22_ON_FLAGS, 7 ; BRA DRM1_VOL_ED_END ; BCF RH22_ON_FLAGS, 7 ; MOVLW D'100' ;Button ACTIVATE INTERVAL.(x20ms). MOVWF DRM1EDTIME ;START MTUNE DOWN TIMER. BSF GENFLAGS9, DRM1TOG_FLAG ; BRA DRM1_VOL_ED_END ;> ;........................................................................ DRM1EDJ1: ; BTFSS RH22_ON_FLAGS, 7 ; BRA DRM1EDJ2 ; BCF RH22_ON_FLAGS, 7 ; BRA DRM1INJ1 ; DRM1EDJ2: ; ; BTFSC GENFLAGS9, DRM1WAIT_BIT ;NOW IN EDIT MODE. BRA DRM1_FLSH_LEDS ; TSTFSZ DRM1EDTIME ;HAS BUTTON BEEN HELD DOWN ENOUGH. BRA DRM1SCANORM ;NO, NOT LONG ENOUGH YET. BSF GENFLAGS3, DRM1_BIT ;YES, TURN PERCUSSION1 ON (EVEN IF OFF). BSF GENFLAGS3, PERCVOLED_BIT ;PERCUSSION EDIT MODE SET. BSF GENFLAGS9, DRM1WAIT_BIT ;SET EDIT MODE ON. ; DRM1_FLSH_LEDS: ;.......................................... BTFSC GENFLAGS8, DRM2_BIT ;EXITS ROUTINE IF ANOTHER DRUM BUTTON BRA DRM1_EDEXIT ; IS PUSHED. BTFSC GENFLAGS8, DRM3_BIT ; BRA DRM1_EDEXIT ; BRA DRM1_EDCONT ; DRM1_EDEXIT: ; MOVLW 0xFA ;EEPROM PERC VOLUME ADDRESS. CALL EEPROM_READ ; MOVWF B1_PERCVOL ;BASS PERC VOLUME LEVEL. ; MOVLW 0xF1 ;EEPROM PERC VOLUME ADDRESS. CALL EEPROM_READ ; MOVWF C1_PERCVOL ;CHORDS PERC VOLUME LEVEL. BRA DRM1_ED_CLR ; DRM1_EDCONT: ;......................................... TSTFSZ MTUNFLASH ; BRA DRM1SCANJ2 ; BTG DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. BTG DISPLAYREG, CHORDBANK ;BASSSOCTBIT=1=BANK B. LED IS OFF. MOVLW D'25' ;LED FLASH RATE. MOVWF MTUNFLASH ; DRM1SCANJ2: ; BRA DRM1_VOL_ED_END ;EXIT > ;........................................................................ DRM1INJ1: ; MOVF B1_PERCVOL, W ;BASS PERCUSSION VOLUME LEVEL. MOVWF EEDATA ;VALUE TO WRITE TO EEPROM. MOVLW 0xFA ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; MOVF C1_PERCVOL, W ;CHORDS POT VALUE. MOVWF EEDATA ;VALUE TO WRITE TO EEPROM. MOVLW 0xF1 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; DRM1_ED_CLR: ; BTFSS GENFLAGS1, BASSOCTBIT ; BSF DISPLAYREG, BASSBANK ;BASSOCTBIT=0=BANK A. LED IS ON. BTFSC GENFLAGS1, BASSOCTBIT ; BCF DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. ; BTFSS GENFLAGS1, CHORDOCTBIT ; BSF DISPLAYREG, CHORDBANK ;BASSOCTBIT=0=BANK A. LED IS ON. BTFSC GENFLAGS1, CHORDOCTBIT ; BCF DISPLAYREG, CHORDBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. ; BCF GENFLAGS3, PERCVOLED_BIT ;PERC EDIT MODE IS NOW OFF. BCF GENFLAGS9, DRM1TOG_FLAG ;FIRST TIME IN FLAG. BCF GENFLAGS9, DRM1WAIT_BIT ;SET EDIT MODE OFF. BSF DISPLAYREG, GREEN ;RESET (TURN ON) GREEN LED. ; DRM1SCANORM: ; BTFSS RH22_OFF_FLAGS, 7 ; BRA DRM1_VOL_ED_END ; BCF RH22_OFF_FLAGS, 7 ; BCF GENFLAGS3, PERCVOLED_BIT ;PERC EDIT MODE IS NOW OFF. BCF GENFLAGS9, DRM1TOG_FLAG ;FIRST TIME IN FLAG. BSF DISPLAYREG, GREEN ;RESET (TURN ON) GREEN LED. ;.................................................... DRM1_VOL_ED_END: ; ;___________________________________________________________________________________________________________________ DRUMS2VOL_EDIT: ;DRUMS2 BUTTON HOLD ROUTINE. BTFSC GENFLAGS9, DRM2TOG_FLAG ; BRA DRM2EDJ1 ; BEEN IN ONCE ALREADY. TIMER STARTED. ; BTFSS BASS_ON_FLAGS, 7 ; BRA DRM2_VOL_ED_END ; BCF BASS_ON_FLAGS, 7 ; MOVLW D'100' ;Button ACTIVATE INTERVAL.(x20ms). MOVWF DRM1EDTIME ;START MTUNE DOWN TIMER. BSF GENFLAGS9, DRM2TOG_FLAG ; BRA DRM2_VOL_ED_END ;> ;........................................................................ DRM2EDJ1: ; BTFSS BASS_ON_FLAGS, 7 ; BRA DRM2EDJ2 ; BCF BASS_ON_FLAGS, 7 ; BRA DRM2INJ1 ; DRM2EDJ2: ; ; BTFSC GENFLAGS9, DRM2WAIT_BIT ;NOW IN EDIT MODE. BRA DRM2_FLSH_LEDS ; TSTFSZ DRM1EDTIME ;HAS BUTTON BEEN HELD DOWN ENOUGH. BRA DRM2SCANORM ;NO, NOT LONG ENOUGH YET. BSF GENFLAGS8, DRM2_BIT ;YES, TURN PERCUSSION2 ON (EVEN IF OFF). BSF GENFLAGS3, PERCVOLED_BIT ;PERCUSSION EDIT MODE SET. BSF GENFLAGS9, DRM2WAIT_BIT ;SET EDIT MODE ON. ; DRM2_FLSH_LEDS: ;.......................................... BTFSC GENFLAGS3, DRM1_BIT ;EXITS ROUTINE IF ANOTHER DRUM BUTTON BRA DRM2_EDEXIT ; IS PUSHED. BTFSC GENFLAGS8, DRM3_BIT ; BRA DRM2_EDEXIT ; BRA DRM2_EDCONT ; DRM2_EDEXIT: ; MOVLW 0xEE ;EEPROM PERC VOLUME ADDRESS. CALL EEPROM_READ ; MOVWF B2_PERCVOL ;BASS PERC VOLUME LEVEL. ; MOVLW 0xED ;EEPROM PERC VOLUME ADDRESS. CALL EEPROM_READ ; MOVWF C2_PERCVOL ;CHORDS PERC VOLUME LEVEL. BRA DRM2_ED_CLR ; ; DRM2_EDCONT: ;......................................... TSTFSZ MTUNFLASH ; BRA DRM2SCANJ2 ; BTG DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. BTG DISPLAYREG, CHORDBANK ;BASSSOCTBIT=1=BANK B. LED IS OFF. MOVLW D'25' ;LED FLASH RATE. MOVWF MTUNFLASH ; DRM2SCANJ2: ; BRA DRM2_VOL_ED_END ;EXIT > ;........................................................................ DRM2INJ1: ; MOVF B2_PERCVOL, W ;BASS PERCUSSION VOLUME LEVEL. MOVWF EEDATA ;VALUE TO WRITE TO EEPROM. MOVLW 0xEE ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; MOVF C2_PERCVOL, W ;CHORDS POT VALUE. MOVWF EEDATA ;VALUE TO WRITE TO EEPROM. MOVLW 0xED ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; DRM2_ED_CLR: ; BTFSS GENFLAGS1, BASSOCTBIT ; BSF DISPLAYREG, BASSBANK ;BASSOCTBIT=0=BANK A. LED IS ON. BTFSC GENFLAGS1, BASSOCTBIT ; BCF DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. ; BTFSS GENFLAGS1, CHORDOCTBIT ; BSF DISPLAYREG, CHORDBANK ;BASSOCTBIT=0=BANK A. LED IS ON. BTFSC GENFLAGS1, CHORDOCTBIT ; BCF DISPLAYREG, CHORDBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. ; BCF GENFLAGS3, PERCVOLED_BIT ;PERC EDIT MODE IS NOW OFF. BCF GENFLAGS9, DRM2TOG_FLAG ;FIRST TIME IN FLAG. BCF GENFLAGS9, DRM2WAIT_BIT ;SET EDIT MODE OFF. BSF DISPLAYREG, GREEN ;RESET (TURN ON) GREEN LED. ; DRM2SCANORM: ; BTFSS BASS_OFF_FLAGS, 7 ; BRA DRM2_VOL_ED_END ; BCF BASS_OFF_FLAGS, 7 ; BCF GENFLAGS3, PERCVOLED_BIT ;PERC EDIT MODE IS NOW OFF. BCF GENFLAGS9, DRM2TOG_FLAG ;FIRST TIME IN FLAG. BSF DISPLAYREG, GREEN ;RESET (TURN ON) GREEN LED. ;.................................................... DRM2_VOL_ED_END: ; ;___________________________________________________________________________________________________________________ DRUMS3_VOL_EDIT: ;DRUMS1 BUTTON HOLD ROUTINE. BTFSC GENFLAGS9, DRM3TOG_FLAG ; BRA DRM3EDJ1 ; BEEN IN ONCE ALREADY. TIMER STARTED. ; BTFSS CHORD_ON_FLAGS, 7 ; BRA DRM3_VOL_ED_END ; BCF CHORD_ON_FLAGS, 7 ; MOVLW D'100' ;Button ACTIVATE INTERVAL.(x20ms). MOVWF DRM1EDTIME ;START MTUNE DOWN TIMER. BSF GENFLAGS9, DRM3TOG_FLAG ; BRA DRM3_VOL_ED_END ;> ;........................................................................ DRM3EDJ1: ; BTFSS CHORD_ON_FLAGS, 7 ; BRA DRM3EDJ2 ; BCF CHORD_ON_FLAGS, 7 ; BRA DRM3INJ1 ; DRM3EDJ2: ; ; BTFSC GENFLAGS10, DRM3WAIT_BIT ;NOW IN EDIT MODE. BRA DRM3_FLSH_LEDS ; TSTFSZ DRM1EDTIME ;HAS BUTTON BEEN HELD DOWN ENOUGH. BRA DRM3SCANORM ;NO, NOT LONG ENOUGH YET. BSF GENFLAGS8, DRM3_BIT ;YES, TURN PERCUSSION 3 ON (EVEN IF OFF). BSF GENFLAGS3, PERCVOLED_BIT ;PERCUSSION EDIT MODE SET. BSF GENFLAGS10, DRM3WAIT_BIT ;SET EDIT MODE ON. ; DRM3_FLSH_LEDS: ;.......................................... BTFSC GENFLAGS3, DRM1_BIT ;EXITS ROUTINE IF ANOTHER DRUM BUTTON BRA DRM3_EDEXIT ; IS PUSHED. BTFSC GENFLAGS8, DRM2_BIT ; BRA DRM3_EDEXIT ; BRA DRM3_EDCONT ; DRM3_EDEXIT: ; MOVLW 0xEC ;EEPROM PERC VOLUME ADDRESS. CALL EEPROM_READ ; MOVWF B3_PERCVOL ;BASS PERC VOLUME LEVEL. ; MOVLW 0xEB ;EEPROM PERC VOLUME ADDRESS. CALL EEPROM_READ ; MOVWF C3_PERCVOL ;CHORDS PERC VOLUME LEVEL. BRA DRM3_ED_CLR ; ; DRM3_EDCONT: ;......................................... TSTFSZ MTUNFLASH ; BRA DRM3SCANJ2 ; BTG DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. BTG DISPLAYREG, CHORDBANK ;BASSSOCTBIT=1=BANK B. LED IS OFF. MOVLW D'25' ;LED FLASH RATE. MOVWF MTUNFLASH ; DRM3SCANJ2: ; BRA DRM3_VOL_ED_END ;EXIT > ;........................................................................ DRM3INJ1: ; MOVF B3_PERCVOL, W ;BASS PERCUSSION VOLUME LEVEL. MOVWF EEDATA ;VALUE TO WRITE TO EEPROM. MOVLW 0xEC ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; MOVF C3_PERCVOL, W ;CHORDS POT VALUE. MOVWF EEDATA ;VALUE TO WRITE TO EEPROM. MOVLW 0xEB ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; DRM3_ED_CLR: ; BTFSS GENFLAGS1, BASSOCTBIT ; BSF DISPLAYREG, BASSBANK ;BASSOCTBIT=0=BANK A. LED IS ON. BTFSC GENFLAGS1, BASSOCTBIT ; BCF DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. ; BTFSS GENFLAGS1, CHORDOCTBIT ; BSF DISPLAYREG, CHORDBANK ;BASSOCTBIT=0=BANK A. LED IS ON. BTFSC GENFLAGS1, CHORDOCTBIT ; BCF DISPLAYREG, CHORDBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. ; BCF GENFLAGS3, PERCVOLED_BIT ;PERC EDIT MODE IS NOW OFF. BCF GENFLAGS9, DRM3TOG_FLAG ;FIRST TIME IN FLAG. BCF GENFLAGS10, DRM3WAIT_BIT ;SET EDIT MODE OFF. BSF DISPLAYREG, GREEN ;RESET (TURN ON) GREEN LED. ; DRM3SCANORM: ; BTFSS CHORD_OFF_FLAGS, 7 ; BRA DRM3_VOL_ED_END ; BCF CHORD_OFF_FLAGS, 7 ; BCF GENFLAGS3, PERCVOLED_BIT ;PERC EDIT MODE IS NOW OFF. BCF GENFLAGS9, DRM3TOG_FLAG ;FIRST TIME IN FLAG. BSF DISPLAYREG, GREEN ;RESET (TURN ON) GREEN LED. ;.................................................... DRM3_VOL_ED_END: ; DRMEDEND: ; ;................................................................................................................................................................................................. TREMOLO_EDIT: ; BTFSC GENFLAGS7, TREMTOG_FLAG ; BRA TREMEDJ1 ; BEEN IN ONCE ALREADY. TIMER STARTED. ; BTFSS RH21_ON_FLAGS, 7 ; BRA TREM_VOL_ED_END ;Jump out if no button change to on. BCF RH21_ON_FLAGS, 7 ; MOVLW D'100' ;Button ACTIVATE INTERVAL.(x20ms). MOVWF SOLOONTIME ;START MTUNE DOWN TIMER. BSF GENFLAGS7, TREMTOG_FLAG ; BRA TREM_VOL_ED_END ;> ;........................................................................ TREMEDJ1: ;Once button pressed once enter here. BTFSS RH21_ON_FLAGS, 7 ; BRA TREMEDJ2 ; BCF RH21_ON_FLAGS, 7 ; BRA TREMINJ1 ;BUTTON HAS BEEN PRESSED AGAIN. ;................................................ TREMEDJ2: ; BTFSC GENFLAGS7, TREMWAIT_BIT ;NOW IN EDIT MODE. BRA TREM_FLSH_LEDS ; TSTFSZ SOLOONTIME ;HAS BUTTON BEEN HELD DOWN ENOUGH. BRA TREMSCANORM ;NO, NOT LONG ENOUGH YET. BSF GENFLAGS7, TREMVOLED_BIT ;TREM EDIT MODE SET. BSF GENFLAGS7, TREMWAIT_BIT ;SET EDIT MODE ON. ; ;,,.............................................................................................. ;SEND CURRENT TREM VALUES UPON ENTERING EDIT MODE. BSF GENFLAGS6, SYSX11_B7_FLG ;PUT NEW VALUE IN SYSX11BYTE7. MOVLW 0x27 ;SELECT CHANNEL 5 ! MOVWF SYSX11BYTE7 ; MOVLW 0x26 ;SELECT TREM DEPTH. MOVWF SYSX11BYTE8 ; MOVLW 0x7F ;MOD DEPTH VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG ;PUT NEW VALUE IN SYSX11BYTE7. MOVLW 0x25 ;SELECT CHANNEL 5 ! MOVWF SYSX11BYTE7 ; MOVLW 0x26 ;SELECT TREM DEPTH. MOVWF SYSX11BYTE8 ; MOVLW 0x7F ;MOD DEPTH VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG ; MOVLW 0x24 ;SELECT CHANNEL 4 ! MOVWF SYSX11BYTE7 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG; MOVLW 0x21 ;SELECT CHANNEL 1 ! MOVWF SYSX11BYTE7 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; ; MOVLW 0xF5 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF TREMDEPTH ; ; MOVLW 0xF4 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF TREMSPEED ; ; MOVWF SYSX11BYTE9 ;MOD LFO RATE CONTROL. MOVLW 0x03 ; MOVWF SYSX11BYTE8 ; MOVLW 0x2F ;COMMON TO ALL CHANNELS. MOVWF SYSX11BYTE7 ; BSF GENFLAGS6, SYSX11_B7_FLG; CALL SYSX11BYTE ; ; MOVLW 0xD3 ;CHAN PRESSURE CH4. EHTREM10: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA EHTREM10 ; MOVWF TXREG ;SEND MIDI. MOVF TREMDEPTH, W ;DATA BYTE. EHTREM11: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA EHTREM11 ; MOVWF TXREG ;SEND MIDI. ; MOVLW 0xD4 ;CHAN PRESSURE CH5. EHTREM20: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA EHTREM20 ; MOVWF TXREG ;SEND MIDI. MOVF TREMDEPTH, W ;DATA BYTE. EHTREM21: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA EHTREM21 ; MOVWF TXREG ;SEND MIDI. ; MOVLW 0xD0 ;CHAN PRESSURE CH1. EHTREM30: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA EHTREM30 ; MOVWF TXREG ;SEND MIDI. MOVF TREMDEPTH, W ;DATA BYTE. EHTREM31: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA EHTREM31 ; MOVWF TXREG ;SEND MIDI. ; ; MOVLW 0xD6 ;CHAN PRESSURE CH7. EHTREM40: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA EHTREM40 ; MOVWF TXREG ;SEND MIDI. MOVF TREMDEPTH, W ;DATA BYTE. EHTREM41: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA EHTREM41 ; MOVWF TXREG ;SEND MIDI. ; ;................................................................................................ TREM_FLSH_LEDS: ; BTFSC GENFLAGS3, PERCVOLED_BIT ;PERC EDIT MODE IS ON. BRA TREMBAIL ;EXIT TREM EDIT IF PERC EDIT MODE ATTEMPTED. BTFSC GENFLAGS11, SOLOVOLED_BIT ;SOLO EDIT MODE IS ON. BRA TREMBAIL ;EXIT TREM EDIT IF SOLO EDIT MODE ATTEMPTED. ; TSTFSZ MTUNFLASH ; BRA TREMSCANJ2 ; BTG DISPLAYREG, MUTE2LED ; BTG DISPLAYREG, MUTE1LED ; MOVLW D'38' ;MUTE-LEDS FLASH RATE. MOVWF MTUNFLASH ; TREMSCANJ2: ; BRA TREM_VOL_ED_END ;EXIT > ;........................................................................ TREMINJ1: ; MOVF TREMSPEED, W ;TREMOLO VALUE. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xF4 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; MOVF TREMDEPTH, W ;TREMOLO VALUE. MOVWF EEDATA ;VALUE TO WRITE. MOVLW 0xF5 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; TREMBAIL: ; BTFSS GENFLAGS1, MUTE2_FLAG ;RESET LED TO PREV CONDITION. BSF DISPLAYREG, MUTE2LED ;LED IS ON. BTFSC GENFLAGS1, MUTE2_FLAG ;RESET LED TO PREV CONDITION. BCF DISPLAYREG, MUTE2LED ;LED IS OFF. ; BTFSS GENFLAGS1, MUTE1_FLAG ;RESET LED TO PREV CONDITION. BSF DISPLAYREG, MUTE1LED ;LED IS ON. BTFSC GENFLAGS1, MUTE1_FLAG ;RESET LED TO PREV CONDITION. BCF DISPLAYREG, MUTE1LED ;LED IS OFF. ; BCF GENFLAGS7, TREMWAIT_BIT ; BCF GENFLAGS7, TREMTOG_FLAG ;TREM IS OFF. BCF GENFLAGS7, TREMVOLED_BIT ;TREMOLO ED MODE IS NOW OFF.; BSF DISPLAYREG, GREEN ;RESET GREEN LED. ; TREMSCANORM: ; BTFSS RH21_OFF_FLAGS, 7 ; BRA TREM_VOL_ED_END ; BCF RH21_OFF_FLAGS, 7 ; BCF GENFLAGS7, TREMTOG_FLAG ;TREM IS OFF. BCF GENFLAGS7, TREMVOLED_BIT ;TREMOLO ED MODE IS NOW OFF.; BSF DISPLAYREG, GREEN ;RESET GREEN LED. ;.................................................... TREM_VOL_ED_END: ; ;................................................................................................................................................................................................................ SOLO_EDIT: ; BTFSC GENFLAGS11, SOLOTOG_FLAG ; BRA SOLOEDJ1 ; BEEN IN ONCE ALREADY. TIMER STARTED. ; BTFSS RH12_ON_FLAGS, 7 ; BRA SOLO_VOL_ED_END ;Jump out if no button change to on. BCF RH12_ON_FLAGS, 7 ; MOVLW D'100' ;Button ACTIVATE INTERVAL.(x20ms). MOVWF SOLOONTIME ;START MTUNE DOWN TIMER. BSF GENFLAGS11, SOLOTOG_FLAG ; BRA SOLO_VOL_ED_END ;> ;........................................................................ SOLOEDJ1: ;Once button pressed once enter here. BTFSS RH12_ON_FLAGS, 7 ; BRA SOLOEDJ2 ; BCF RH12_ON_FLAGS, 7 ; BRA SOLOINJ1 ; SOLOEDJ2: ; ; BTFSC GENFLAGS11, SOLOWAIT_BIT ;NOW IN EDIT MODE. BRA SOLO_FLSH_LEDS ; TSTFSZ SOLOONTIME ;HAS BUTTON BEEN HELD DOWN ENOUGH. BRA SOLOSCANORM ;NO, NOT LONG ENOUGH YET. BSF GENFLAGS11, SOLOVOLED_BIT ;SOLO EDIT MODE SET. BSF GENFLAGS11, SOLOWAIT_BIT ;SET EDIT MODE ON. ; SOLO_FLSH_LEDS: ;........................................................................ BTFSC GENFLAGS3, PERCVOLED_BIT ;PERC EDIT MODE IS ON. BRA SOLO_ED_CLR ;EXIT SOLO EDIT IF PERC EDIT MODE ATTEMPTED. BTFSC GENFLAGS7, TREMVOLED_BIT ;TREM EDIT MODE IS ON. BRA SOLO_ED_CLR ;EXIT SOLO EDIT IF TREM EDIT MODE ATTEMPTED. ; TSTFSZ MTUNFLASH ; BRA SOLOSCANJ2 ; BTG DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. MOVLW D'25' ;LED FLASH RATE. MOVWF MTUNFLASH ; SOLOSCANJ2: ; BRA SOLO_VOL_ED_END ;EXIT > ;........................................................................ SOLOINJ1: ; MOVF SOLOVALPOT, W ;SOLO VOLUME LEVEL. MOVWF EEDATA ;VALUE TO WRITE TO EEPROM. MOVLW 0xEA ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; ; SOLO_ED_CLR: ; BTFSS GENFLAGS1, BASSOCTBIT ; BSF DISPLAYREG, BASSBANK ;BASSOCTBIT=0=BANK A. LED IS ON. BTFSC GENFLAGS1, BASSOCTBIT ; BCF DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. ; ; BCF GENFLAGS11, SOLOVOLED_BIT ;PERC EDIT MODE IS NOW OFF. BCF GENFLAGS11, SOLOTOG_FLAG ;FIRST TIME IN FLAG. BCF GENFLAGS11, SOLOWAIT_BIT ;SET EDIT MODE OFF. BSF DISPLAYREG, GREEN ;RESET (TURN ON) GREEN LED. ; SOLOSCANORM: ; BTFSS RH12_OFF_FLAGS, 7 ; BRA SOLO_VOL_ED_END ; BCF RH12_OFF_FLAGS, 7 ; BCF GENFLAGS11, SOLOVOLED_BIT ;SOLO EDIT MODE IS NOW OFF. BCF GENFLAGS11, SOLOTOG_FLAG ;FIRST TIME IN FLAG. BSF DISPLAYREG, GREEN ;RESET (TURN ON) GREEN LED. ;.................................................... SOLO_VOL_ED_END: ; ;................................................................................................................................................................................................................. TWOBUTSCAN: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA MUTOGSETEND ;BYPASS ROUTINE IN SOUND EDIT MODE. ;........................................................................................ MOVF PORTC, W ;CHECK IF FSWs ARE ON. ANDLW 0x07 ;1st 3 BITS OF PORTC. BNZ MUTOGSETEND ; BTFSC PORTA, 4 ;FSW4. BRA MUTOGSETEND ; ; MOVLW 0x04 ; MOVWF PORTB ;CHECKING RH1 MUTE BUTTON, NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ;TO ENGAGE TOGGLING OF RH1/RH2. CLRF PORTB ; ANDLW 0x40 ; BZ MUTOGSETEND ; ; MOVLW 0x01 ; MOVWF PORTB ;CHECKING RH2 MUTE BUTTON, NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ;TO ENGAGE TOGGLING OF RH1/RH2. CLRF PORTB ; ANDLW 0x40 ; BZ MUTOGSETEND ; ; BSF GENFLAGS3, MUTOG_FLAG ;SWOPS MUTE RH1 <-> RH2. BSF GENFLAGS1, MUTE2_FLAG ;RH2 OFF. BCF GENFLAGS1, MUTE1_FLAG ;RH1 ON. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON. MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. MOVLW 0xFF ;BUTTONS LOCKOUT TIME. (3msx256). GOTO SCANENDXTRAT ; MUTOGSETEND: ; ;_______________________________________________________________________________________________________________________ BASS_SCAN: ; MOVLW 0x20 ;RB5, ENABLE BASS BUSS. MOVWF PORTB ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ;TO WREG. CLRF PORTB ; MOVWF SCANTEMP1 ;HOLD INPUT SCAN. XORWF BASSCANHOLD, W ;RESULT IN W. MOVFF SCANTEMP1, BASSCANHOLD ; BNZ BASS_SCJ1 ; CLRF BASS_ON_FLAGS ; CLRF BASS_OFF_FLAGS ; GOTO CHORD_SCAN ;EXIT AS NO CHANGE IN SCAN. BASS_SCJ1: ;CHANGE(S) IN SCAN. MOVFF BASSCANHOLD, BASS_OFF_FLAGS ; COMF BASS_OFF_FLAGS, F ; ANDWF BASS_OFF_FLAGS, F ;CHANGES TO OFF STORED. ; ANDWF BASSCANHOLD, W ;CHANGE TO ON NOW IN W. MOVWF BASS_ON_FLAGS ; BSF GENFLAGS10, DIP_CHNG_LED ;Dip control change led. BASS_SCJ2: ; ;........................................................................................................................................................................................ BTFSS BASS_ON_FLAGS, 0 ;BASS 1. BRA BASSINSTR2 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ BAS1J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGBA, FSW1_BAS1_BIT; MOVFF FSW1ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x60 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS1J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ BAS1J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGBA, FSW2_BAS1_BIT; MOVFF FSW2ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x61 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS1J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ BAS1J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGBA, FSW3_BAS1_BIT; MOVFF FSW3ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x62 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS1J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ BAS1J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGBA, FSW4_BAS1_BIT; MOVFF FSW4ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x63 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ;............ BAS1J4: ;BASS SOUND 1A. CLRF BASS_FLAGS ; BSF BASS_FLAGS, BASS1_FLAG ; BTFSC GENFLAGS1, BASSOCTBIT ;SELECT BASS SOUND BANK. BRA BAS1J5 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS1J41 ; BTFSS RECFLAGS1, REC_BAS1_BIT ; BRA BAS1J41 ; MOVLW 0x24 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF BASSFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x00 ;EEPROM BASS1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; BAS1J41: ; MOVLW 0x00 ;EEPROM BASS1 ADDRESS.(ACOUSTIC BASS). MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS1J42 ; CLRF RECFLAGS1 ; BSF RECFLAGS1, REC_BAS1_BIT ; CLRF RECFLAGS2 ; CLRF RECFLAGS3 ; CLRF RECFLAGS4 ; CLRF RECFLAGS5 ; CLRF RECFLAGS6 ; MOVWF SNDTRI ; BAS1J42: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ; BCF GENFLAGS4, BASVEL0_FLAG ;BASS PERCUSSION FLAG. BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BASVEL0_FLAG ; MOVLW 0xC2 ;PROG CHANGE CHAN 3. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SEND FLAG. ; CALL BASSOUND1A ;PARAMETERS TO SEND FOR BASS1A. ; BCF MIDISTAT2, CH6ON_FLAG ;NO 2nd LAYER ON THIS PRESET. BSF GENFLAGS3, PERCON3_BIT ;BASS PERCUSSION FROM Ch10. GOTO SCANEND ; ;........................................................................................................................................................................................ BAS1J5: ;BASS1 BANK B SOUND. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS1J51 ; BTFSS RECFLAGS7, REC_BAS7_BIT ; BRA BAS1J51 ; MOVLW 0x54 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF BASSFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x48 ;EEPROM BASS1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; BAS1J51: ;................................................................. CALL BASSOUND1BL2 ;SOUND 1B (BANK B) LAYER 2. ; MOVLW 0x48 ;EEPROM BASS 7 (1B, led is off) ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS1J52 ; CLRF RECFLAGS1 ; CLRF RECFLAGS2 ; CLRF RECFLAGS3 ; CLRF RECFLAGS4 ; CLRF RECFLAGS5 ; CLRF RECFLAGS6 ; CLRF RECFLAGS7 ;BASS BANK B. CLRF RECFLAGS8 ;CHORD BANK B. BSF RECFLAGS7, REC_BAS7_BIT ; MOVWF SNDTRI BAS1J52: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ; BCF GENFLAGS4, BASVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BASVEL0_FLAG ; MOVLW 0xC2 ;PROG CHANGE CHAN 3. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SEND FLAG. ; CALL BASSOUND1BL1 ;SOUND 1B (BANK B) LAYER 1. ; BSF MIDISTAT2, CH6ON_FLAG ;2nd LAYER ON THIS PRESET. BSF GENFLAGS3, PERCON3_BIT ;BASS PERCUSSION FROM Ch10. GOTO SCANEND ; BASSINSTR2: ;....................................................................................................................................................................................... BTFSS BASS_ON_FLAGS, 1 ; BRA BASSINSTR3 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ BAS2J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGBA, FSW1_BAS2_BIT; MOVFF FSW1ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x60 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS2J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ BAS2J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGBA, FSW2_BAS2_BIT; MOVFF FSW2ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x61 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS2J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ BAS2J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGBA, FSW3_BAS2_BIT; MOVFF FSW3ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x62 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS2J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ BAS2J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGBA, FSW4_BAS2_BIT; MOVFF FSW4ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x63 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ;............ BAS2J4: ; CLRF BASS_FLAGS ; BSF BASS_FLAGS, BASS2_FLAG ; BTFSC GENFLAGS1, BASSOCTBIT ;SELECT BASS SOUND BANK. BRA BAS2J5 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS2J41 ; BTFSS RECFLAGS1, REC_BAS2_BIT ; BRA BAS2J41 ; MOVLW 0x25 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF BASSFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x01 ;EEPROM BASS2 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; BAS2J41: ; CALL BASSOUND2AL2 ;SOUND2 BANK A, LAYER 2. ; MOVLW 0x01 ;EEPROM BASS2 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS2J42 ; CLRF RECFLAGS1 ; CLRF RECFLAGS2 ; CLRF RECFLAGS3 ; CLRF RECFLAGS4 ; CLRF RECFLAGS5 ; CLRF RECFLAGS6 ; CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; BSF RECFLAGS1, REC_BAS2_BIT ; MOVWF SNDTRI ; BAS2J42: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ; BCF GENFLAGS4, BASVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BASVEL0_FLAG ; MOVLW 0xC2 ;PROG CHANGE CHAN 3. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL BASSOUND2AL1 ; ; BSF MIDISTAT2, CH6ON_FLAG ; BSF GENFLAGS3, PERCON3_BIT ;BASS PERCUSSION FROM Ch10. GOTO SCANEND ; ;........................................................................................................................................................................................ BAS2J5: ;BASS BANK B SOUND. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS2J51 ; BTFSS RECFLAGS7, REC_BAS8_BIT ; BRA BAS2J51 ; MOVLW 0x55 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF BASSFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x49 ;EEPROM BASS2 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; BAS2J51: ; MOVLW 0x49 ;EEPROM BASS2A ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS2J52 ; CLRF RECFLAGS1 ; CLRF RECFLAGS2 ; CLRF RECFLAGS3 ; CLRF RECFLAGS4 ; CLRF RECFLAGS5 ; CLRF RECFLAGS6 ; CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; BSF RECFLAGS7, REC_BAS8_BIT ; MOVWF SNDTRI ; BAS2J52: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ; BCF GENFLAGS4, BASVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BASVEL0_FLAG ; MOVLW 0xC2 ;PROG CHANGE CHAN 3. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL BASSOUND2BL1 ; BAS2J531: ; BCF MIDISTAT2, CH6ON_FLAG ; BSF GENFLAGS3, PERCON3_BIT ;BASS PERCUSSION FROM Ch10. GOTO SCANEND ; BASSINSTR3: ;........................................................................................................................................................................................ BTFSS BASS_ON_FLAGS, 2 ; GOTO BASSINSTR4 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ BAS3J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGBA, FSW1_BAS3_BIT; MOVFF FSW1ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x60 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS3J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ BAS3J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGBA, FSW2_BAS3_BIT; MOVFF FSW2ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x61 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS3J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ BAS3J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGBA, FSW3_BAS3_BIT; MOVFF FSW3ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x62 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS3J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ BAS3J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGBA, FSW4_BAS3_BIT; MOVFF FSW4ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x63 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ;............ BAS3J4: ; CLRF BASS_FLAGS ; BSF BASS_FLAGS, BASS3_FLAG ; BTFSC GENFLAGS1, BASSOCTBIT ;SELECT BASS SOUND BANK. BRA BAS3J5 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS3J41 ; BTFSS RECFLAGS1, REC_BAS3_BIT ; BRA BAS3J41 ; MOVLW 0x26 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF BASSFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x02 ;EEPROM BASS3 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; BAS3J41: ; CALL BASSOUND3AL2 ; ; MOVLW 0x02 ;EEPROM BASS3 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS3J42 ; CLRF RECFLAGS1 ; BSF RECFLAGS1, REC_BAS3_BIT ; CLRF RECFLAGS2 ; CLRF RECFLAGS3 ; CLRF RECFLAGS4 ; CLRF RECFLAGS5 ; CLRF RECFLAGS6 ; CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVWF SNDTRI ; BAS3J42: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ; BCF GENFLAGS4, BASVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BASVEL0_FLAG ; MOVLW 0xC2 ;PROG CHANGE CHAN 3. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL BASSOUND3AL1 ; ; BSF MIDISTAT2, CH6ON_FLAG ;DOUBLE PIANO. BSF GENFLAGS3, PERCON3_BIT ;BASS PERCUSSION FROM Ch10. GOTO SCANEND ; ; BAS3J5: ;................................................................ BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS3J51 ; BTFSS RECFLAGS7, REC_BAS9_BIT ; BRA BAS3J51 ; MOVLW 0x56 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF BASSFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x4A ;EEPROM BASS3 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; BAS3J51: ; CALL BASSOUND3BL2 ; ; MOVLW 0x4A ;EEPROM BASS3 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS3J52 ; CLRF RECFLAGS1 ; CLRF RECFLAGS2 ; CLRF RECFLAGS3 ; CLRF RECFLAGS4 ; CLRF RECFLAGS5 ; CLRF RECFLAGS6 ; CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; BSF RECFLAGS7, REC_BAS9_BIT ; MOVWF SNDTRI ; BAS3J52: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ; BCF GENFLAGS4, BASVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BASVEL0_FLAG ; MOVLW 0xC2 ;PROG CHANGE CHAN 3. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL BASSOUND3BL1 ; ; BSF MIDISTAT2, CH6ON_FLAG ;DOUBLE PIANO. BSF GENFLAGS3, PERCON3_BIT ;BASS PERCUSSION FROM Ch10. GOTO SCANEND ; BASSINSTR4: ;........................................................................................................................................................................................ BTFSS BASS_ON_FLAGS, 3 ; BRA BASSINSTR5 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ BAS4J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGBA, FSW1_BAS4_BIT; MOVFF FSW1ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x60 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS4J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ BAS4J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGBA, FSW2_BAS4_BIT; MOVFF FSW2ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x61 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS4J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ BAS4J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGBA, FSW3_BAS4_BIT; MOVFF FSW3ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x62 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS4J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ BAS4J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGBA, FSW4_BAS4_BIT; MOVFF FSW1ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x63 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ;............. BAS4J4: ; CLRF BASS_FLAGS ; BSF BASS_FLAGS, BASS4_FLAG ; BTFSC GENFLAGS1, BASSOCTBIT ;SELECT BASS SOUND BANK. BRA BAS4J5 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS4J41 ; BTFSS RECFLAGS1, REC_BAS4_BIT ; BRA BAS4J41 ; MOVLW 0x27 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF BASSFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x03 ;EEPROM BASS4 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; BAS4J41: ; MOVLW 0x03 ;EEPROM BASS4 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS4J42 ; CLRF RECFLAGS1 ; BSF RECFLAGS1, REC_BAS4_BIT ; CLRF RECFLAGS2 ; CLRF RECFLAGS3 ; CLRF RECFLAGS4 ; CLRF RECFLAGS5 ; CLRF RECFLAGS6 ; CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVWF SNDTRI ; BAS4J42: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ; BCF GENFLAGS4, BASVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BASVEL0_FLAG ; MOVLW 0xC2 ;PROG CHANGE CHAN 3. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL BASSOUND4AL1 ; ; BCF MIDISTAT2, CH6ON_FLAG ;NO EXTRA BASS. BSF GENFLAGS3, PERCON3_BIT ;BASS PERCUSSION FROM Ch10. GOTO SCANEND ; ; BAS4J5: ;........................................................................................................................................................................................ BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS4J51 ; BTFSS RECFLAGS7, REC_BAS10_BIT ; BRA BAS4J51 ; MOVLW 0x57 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF BASSFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x4B ;EEPROM BASS4 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; BAS4J51: ; MOVLW 0x4B ;EEPROM BASS4 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS4J52 ; CLRF RECFLAGS1 ; CLRF RECFLAGS2 ; CLRF RECFLAGS3 ; CLRF RECFLAGS4 ; CLRF RECFLAGS5 ; CLRF RECFLAGS6 ; CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; BSF RECFLAGS7, REC_BAS10_BIT ; MOVWF SNDTRI ; BAS4J52: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ; BCF GENFLAGS4, BASVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BASVEL0_FLAG ; MOVLW 0xC2 ;PROG CHANGE CHAN 3. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SEND FLAG. ; CALL BASSOUND4BL1 ; ; BCF MIDISTAT2, CH6ON_FLAG ;EXTRA BASS. BSF GENFLAGS3, PERCON3_BIT ;BASS PERCUSSION FROM Ch10. GOTO SCANEND ; BASSINSTR5: ;........................................................................................................................................................................................ BTFSS WREG, 4 ; BRA BASSINSTR6 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ BAS5J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGBA, FSW1_BAS5_BIT; MOVFF FSW1ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x60 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS5J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ BAS5J2 ; CALL FSW1ASIGNCLEAR ; BSF FSW2ASIGNREGBA, FSW2_BAS5_BIT; MOVFF FSW2ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x61 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS5J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ BAS5J3 ; CALL FSW1ASIGNCLEAR ; BSF FSW3ASIGNREGBA, FSW3_BAS5_BIT; MOVFF FSW3ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x62 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS5J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ BAS5J4 ; CALL FSW1ASIGNCLEAR ; BSF FSW4ASIGNREGBA, FSW4_BAS5_BIT; MOVFF FSW4ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x63 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; BAS5J4: ; CLRF BASS_FLAGS ; BSF BASS_FLAGS, BASS5_FLAG ; BTFSC GENFLAGS1, BASSOCTBIT ;SELECT BASS SOUND BANK. BRA BAS5J5 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS5J41 ; BTFSS RECFLAGS1, REC_BAS5_BIT ; BRA BAS5J41 ; MOVLW 0x28 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF BASSFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x04 ;EEPROM BASS5 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; BAS5J41: ; MOVLW 0x04 ;EEPROM BASS5 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS5J42 ; CLRF RECFLAGS1 ; BSF RECFLAGS1, REC_BAS5_BIT ; CLRF RECFLAGS2 ; CLRF RECFLAGS3 ; CLRF RECFLAGS4 ; CLRF RECFLAGS5 ; CLRF RECFLAGS6 ; CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVWF SNDTRI ; BAS5J42: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ; BCF GENFLAGS4, BASVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BASVEL0_FLAG ; MOVLW 0xC2 ;PROG CHANGE CHAN 3. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL BASSOUND5AL1 ; ; BCF MIDISTAT2, CH6ON_FLAG ;NO EXTRA BASS. BSF GENFLAGS3, PERCON3_BIT ;BASS PERCUSSION FROM Ch10. GOTO SCANEND ; ;........................................................................................................................................................................................ BAS5J5: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS5J51 ; BTFSS RECFLAGS7, REC_BAS11_BIT ; BRA BAS5J51 ; MOVLW 0x58 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF BASSFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x4C ;EEPROM BASS5 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; BAS5J51: ; MOVLW 0x4C ;EEPROM BASS5 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA BAS5J52 ; CLRF RECFLAGS1 ; CLRF RECFLAGS2 ; CLRF RECFLAGS3 ; CLRF RECFLAGS4 ; CLRF RECFLAGS5 ; CLRF RECFLAGS6 ; CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; BSF RECFLAGS7, REC_BAS11_BIT ; MOVWF SNDTRI ; BAS5J52: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ; BCF GENFLAGS4, BASVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BASVEL0_FLAG ; MOVLW 0xC2 ;PROG CHANGE CHAN 3. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL BASSOUND5BL1 ; ; BCF MIDISTAT2, CH6ON_FLAG ;EXTRA BASS LAYER. BSF GENFLAGS3, PERCON3_BIT ;BASS PERCUSSION FROM Ch10. GOTO SCANEND ; ;........................................................................................................................................................................................ BASSINSTR6: ;Bass register button. BTFSS BASS_ON_FLAGS, 5 ; BRA BASSINSOCT ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ BAS6J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGBA, FSW1_BAS6_BIT; MOVFF FSW1ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x60 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS6J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ BAS6J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGBA, FSW2_BAS6_BIT; MOVFF FSW2ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x61 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS6J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ BAS6J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGBA, FSW3_BAS6_BIT; MOVFF FSW3ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x62 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS6J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ BAS6J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGBA, FSW4_BAS6_BIT; MOVFF FSW4ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x63 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; BAS6J4: ;Footswitch jump in point. BAS6J5: ; MOVLW 0xB2 ;ALL SOUND OFF CHAN 3. BAS6CH3OFFJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA BAS6CH3OFFJ1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x7B ;CONTROL NUMBER. BAS6CH3OFFJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA BAS6CH3OFFJ2 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ; BAS6CH3OFFJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA BAS6CH3OFFJ3 ; MOVWF TXREG ;SEND MIDI. ; BTFSS MIDISTAT2, CH6ON_FLAG ;TEST FOR EXTRA BASS LAYER. BRA BAS6REGEND ; MOVLW 0xB5 ;ALL SOUND OFF CHAN 6. BAS6CH3OFFJ4: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA BAS6CH3OFFJ4 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x7B ;CONTROL NUMBER. BAS6CH3OFFJ5: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA BAS6CH3OFFJ5 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ; BAS6CH3OFFJ6: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA BAS6CH3OFFJ6 ; MOVWF TXREG ;SEND MIDI. ; BAS6REGEND: ; BTG GENFLAGS4, BASS_RNG_BIT ; GOTO SCANEND ; BASSINSOCT: ;........................................................................BASS BANK A 0R B SELECT. BTFSS WREG, 6 ; BRA BASS8 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ BAS2RES1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG, FSW1_OBAS_BIT; MOVFF FSW1ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x78 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA BAS2RESFS ; BAS2RES1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ BAS2RES2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG, FSW2_OBAS_BIT; MOVFF FSW2ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x79 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA BAS2RESFS ; BAS2RES2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ BAS2RES3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG, FSW3_OBAS_BIT; MOVFF FSW3ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA BAS2RESFS ; BAS2RES3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW3. BZ BAS2RES4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG, FSW4_OBAS_BIT; MOVFF FSW4ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA BAS2RESFS ; BAS2RES4: ; ; BTG GENFLAGS1, BASSOCTBIT ;BASS SOUND BANK SELECT. BTFSS GENFLAGS1, BASSOCTBIT ; BSF DISPLAYREG, BASSBANK ;BASSOCTBIT=0=BANK A. LED IS ON. BTFSC GENFLAGS1, BASSOCTBIT ; BCF DISPLAYREG, BASSBANK ;BASSOCTBIT=1=BANK B. LED IS OFF. ; BTFSC BASS_FLAGS, BASS1_FLAG ; GOTO BAS1J4 ; BTFSC BASS_FLAGS, BASS2_FLAG ; GOTO BAS2J4 ; BTFSC BASS_FLAGS, BASS3_FLAG ; GOTO BAS3J4 ; BTFSC BASS_FLAGS, BASS4_FLAG ; GOTO BAS4J4 ; BTFSC BASS_FLAGS, BASS5_FLAG ; GOTO BAS5J4 ; BTFSC BASS_FLAGS, BASS6_FLAG ; GOTO BAS6J4 ; BAS2RESFS: ; GOTO SCANEND ; ;........................................................................ BASS8: ;DRUMS PERC SELECT 1. BTFSS BASS_ON_FLAGS, 7 ; BRA CHORD_SCAN ; ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ BAS8J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGBA, FSW1_BAS8_BIT; MOVFF FSW1ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x60 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS8J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ BAS8J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGBA, FSW2_BAS8_BIT; MOVFF FSW2ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x61 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS8J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ BAS8J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGBA, FSW3_BAS8_BIT; MOVFF FSW3ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x62 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; BAS8J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ BAS8J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGBA, FSW4_BAS8_BIT; MOVFF FSW4ASIGNREGBA, EEDATA ;VALUE TO WRITE. MOVLW 0x63 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; BAS8J4: ;Footswitch jump in point. This would be Drum button3 ; select point. BCF GENFLAGS3, DRM1_BIT ;Clear drum1. BCF GENFLAGS8, DRM3_BIT ;Clear drum2. BTG GENFLAGS8, DRM2_BIT ; ; BTFSS GENFLAGS8, DRM2_BIT ;2 MOVLW D'0' ;PROG 1 - STANDARD DRUM SET. BTFSC GENFLAGS8, DRM2_BIT ;2 MOVLW D'0' ;(PROG 4 - BRUSH DRUM SET.) MOVWF PROGCHHOLD2 ;BANK SELECT FOR PERCUSSION. MOVLW 0xC9 ;Ch10. MOVWF PROGCHHOLD1 ; CALL PROGCHNGSEND ; GOTO SCANEND ; ;............................................................................................................................................................................................ CHORD_SCAN: ; MOVLW 0x10 ;RB5, ENABLE BASS BUSS. MOVWF PORTB ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ;TO WREG. CLRF PORTB ; MOVWF SCANTEMP1 ; XORWF CHORDSCANHOLD, W ;RESULT IN W. MOVFF SCANTEMP1, CHORDSCANHOLD; BNZ CHORD0J1 ;CHANGE IN SCAN. GOTO RH11_SCAN ;NO CHANGE IN SCAN. CHORD0J1: ; MOVFF CHORDSCANHOLD, CHORD_OFF_FLAGS ; COMF CHORD_OFF_FLAGS, F ; ANDWF CHORD_OFF_FLAGS, F ;CHANGES TO OFF STORED. ; ANDWF SCANTEMP1, W ;CHANGE TO ON NOW IN W. MOVWF CHORD_ON_FLAGS ; BSF GENFLAGS10, DIP_CHNG_LED ;Dip control change led. CHORD0J2: ;........................................................................................................................................................................................ BTFSS CHORD_ON_FLAGS, 0 ; BRA CHORDINSTR2 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ CHD1J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGCH, FSW1_CHD1_BIT; MOVFF FSW1ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x64 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD1J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ CHD1J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGCH, FSW2_CHD1_BIT; MOVFF FSW2ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x65 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD1J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ CHD1J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGCH, FSW3_CHD1_BIT; MOVFF FSW3ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x66 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD1J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ CHD1J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGCH, FSW4_CHD1_BIT; MOVFF FSW4ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x67 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; CHD1J4: ; CLRF CHORD_FLAGS ; BSF CHORD_FLAGS, CHORD1_FLAG;SHOWS ACTIVE CHORD BUTTON. BTFSC GENFLAGS1, CHORDOCTBIT ;SELECT CHORD SOUND BANK. BRA CHD1J5 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD1J41 ; BTFSS RECFLAGS2, REC_CHD1_BIT ; BRA CHD1J41 ; MOVLW 0x2A ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF CHORDFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x06 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; CHD1J41: ; MOVLW 0x06 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD1J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. BSF RECFLAGS2, REC_CHD1_BIT ; CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVWF SNDTRI ; CHD1J42: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL CHORDSOUND1A ; ; BSF GENFLAGS3, PERCON2_BIT ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ CHD1J5: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD1J51 ; BTFSS RECFLAGS8, REC_CHD7_BIT ; BRA CHD1J51 ; MOVLW 0x5A ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF CHORDFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x4E ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; CHD1J51: ; MOVLW 0x4E ;EEPROM CHORD6 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD1J52 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; BSF RECFLAGS8, REC_CHD7_BIT ; MOVWF SNDTRI ; CHD1J52: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL CHORDSOUND1B ; ; BSF GENFLAGS3, PERCON2_BIT ;Ch10 PERCUSSION ON Ch2. ; GOTO SCANEND ; ;......................................................................................................................................................................................... CHORDINSTR2: ; BTFSS CHORD_ON_FLAGS, 1 ; GOTO CHORDINSTR3 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ CHD2J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGCH, FSW1_CHD2_BIT; MOVFF FSW1ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x64 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD2J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ CHD2J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGCH, FSW2_CHD2_BIT; MOVFF FSW2ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x65 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD2J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ CHD2J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGCH, FSW3_CHD2_BIT; MOVFF FSW3ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x66 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD2J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ CHD2J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGCH, FSW4_CHD2_BIT; MOVFF FSW4ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x67 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; CHD2J4: ; CLRF CHORD_FLAGS ; BSF CHORD_FLAGS, CHORD2_FLAG;SHOWS ACTIVE CHORD BUTTON. BTFSC GENFLAGS1, CHORDOCTBIT ;SELECT CHORD SOUND BANK. BRA CHD2J5 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD2J41 ; BTFSS RECFLAGS2, REC_CHD2_BIT ; BRA CHD2J41 ; MOVLW 0x2B ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF CHORDFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x07 ;EEPROM CHORD2 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; CHD2J41: ; MOVLW 0x07 ;EEPROM CHORD2 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD2J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. BSF RECFLAGS2, REC_CHD2_BIT ; CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVWF SNDTRI ; CHD2J42: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL CHORDSOUND2A ; ; BSF GENFLAGS3, PERCON2_BIT ;Ch10 PERCUSSION ON Ch2. ; GOTO SCANEND ; ;........................................................................................................................................................................................ CHD2J5: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD2J51 ; BTFSS RECFLAGS8, REC_CHD8_BIT ; BRA CHD2J51 ; MOVLW 0x5B ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF CHORDFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x4F ;EEPROM CHORD2 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; CHD2J51: ; MOVLW 0x4F ;EEPROM CHORD2 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD2J52 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; BSF RECFLAGS8, REC_CHD8_BIT ; MOVWF SNDTRI ; CHD2J52: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL CHORDSOUND2B ; ; BSF GENFLAGS3, PERCON2_BIT ;Ch10 PERCUSSION ON Ch2. ; GOTO SCANEND ; ;........................................................................................................................................................................................ CHORDINSTR3: ; BTFSS CHORD_ON_FLAGS, 2 ; GOTO CHORDINSTR4 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ CHD3J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGCH, FSW1_CHD3_BIT; MOVFF FSW1ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x64 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD3J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ CHD3J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGCH, FSW2_CHD3_BIT; MOVFF FSW2ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x65 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD3J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ CHD3J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGCH, FSW3_CHD3_BIT; MOVFF FSW3ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x66 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD3J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ CHD3J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGCH, FSW4_CHD3_BIT; MOVFF FSW4ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x67 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; CHD3J4: ; CLRF CHORD_FLAGS ; BSF CHORD_FLAGS, CHORD3_FLAG;SHOWS ACTIVE CHORD BUTTON. BTFSC GENFLAGS1, CHORDOCTBIT ;SELECT CHORD SOUND BANK. BRA CHD3J5 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD3J41 ; BTFSS RECFLAGS2, REC_CHD3_BIT ; BRA CHD3J41 ; MOVLW 0x2C ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF CHORDFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x08 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; CHD3J41: ; MOVLW 0x08 ;EEPROM CHORD3 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD3J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. BSF RECFLAGS2, REC_CHD3_BIT ; CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVWF SNDTRI ; CHD3J42: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL CHORDSOUND3A ; ; BSF GENFLAGS3, PERCON2_BIT ;Ch10 PERCUSSION ON Ch2. ; GOTO SCANEND ; ;........................................................................................................................................................................................ CHD3J5: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD3J51 ; BTFSS RECFLAGS8, REC_CHD9_BIT ; BRA CHD3J51 ; MOVLW 0x5C ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF CHORDFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x50 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; CHD3J51: ; MOVLW 0x50 ;EEPROM CHORD3 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD3J52 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; BSF RECFLAGS8, REC_CHD9_BIT ; MOVWF SNDTRI ; CHD3J52: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL CHORDSOUND3B ; ; BSF GENFLAGS3, PERCON2_BIT ;Ch10 PERCUSSION ON Ch2. GOTO SCANEND ; ;........................................................................................................................................................................................ CHORDINSTR4: ; BTFSS CHORD_ON_FLAGS, 3 ; GOTO CHORDINSTR5 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ CHD4J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGCH, FSW1_CHD4_BIT; MOVFF FSW1ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x64 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD4J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ CHD4J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGCH, FSW2_CHD4_BIT; MOVFF FSW2ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x65 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD4J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ CHD4J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGCH, FSW3_CHD4_BIT; MOVFF FSW3ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x66 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD4J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ CHD4J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGCH, FSW4_CHD4_BIT; MOVFF FSW4ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x67 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; CHD4J4: ; CLRF CHORD_FLAGS ; BSF CHORD_FLAGS, CHORD4_FLAG;SHOWS ACTIVE CHORD BUTTON. BTFSC GENFLAGS1, CHORDOCTBIT ;SELECT CHORD SOUND BANK. BRA CHD4J5 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD4J41 ; BTFSS RECFLAGS2, REC_CHD4_BIT ; BRA CHD4J41 ; MOVLW 0x2D ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF CHORDFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x09 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; CHD4J41: ; MOVLW 0x09 ;EEPROM CHORD4 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD4J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. BSF RECFLAGS2, REC_CHD4_BIT ; CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVWF SNDTRI ; CHD4J42: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL CHORDSOUND4A ; ; BSF GENFLAGS3, PERCON2_BIT ;Ch10 PERCUSSION ON Ch2. GOTO SCANEND ; ;........................................................................................................................................................................................ CHD4J5: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD4J51 ; BTFSS RECFLAGS8, REC_CHD10_BIT ; BRA CHD4J51 ; MOVLW 0x5D ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF CHORDFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x51 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; CHD4J51: ; MOVLW 0x51 ;EEPROM CHORD4 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD4J52 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; BSF RECFLAGS8, REC_CHD10_BIT; MOVWF SNDTRI ; CHD4J52: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL CHORDSOUND4B ; ; BSF GENFLAGS3, PERCON2_BIT ;Ch10 PERCUSSION ON Ch2. GOTO SCANEND ; ;........................................................................................................................................................................................ CHORDINSTR5: ; BTFSS CHORD_ON_FLAGS, 4 ; GOTO CHORDINSTR6 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ CHD5J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGCH, FSW1_CHD5_BIT; MOVFF FSW1ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x64 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD5J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ CHD5J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGCH, FSW2_CHD5_BIT; MOVFF FSW2ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x65 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD5J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ CHD5J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGCH, FSW3_CHD5_BIT; MOVFF FSW3ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x66 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD5J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ CHD5J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGCH, FSW4_CHD5_BIT; MOVFF FSW4ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x67 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; CHD5J4: ; CLRF CHORD_FLAGS ; BSF CHORD_FLAGS, CHORD5_FLAG;SHOWS ACTIVE CHORD BUTTON. BTFSC GENFLAGS1, CHORDOCTBIT ;SELECT CHORD SOUND BANK. BRA CHD5J5 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD5J41 ; BTFSS RECFLAGS2, REC_CHD5_BIT ; BRA CHD5J41 ; MOVLW 0x2E ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF CHORDFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x0A ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; CHD5J41: ; MOVLW 0x0A ;EEPROM CHORD5 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD5J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. BSF RECFLAGS2, REC_CHD5_BIT ; CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVWF SNDTRI ; CHD5J42: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL CHORDSOUND5A ; ; BSF GENFLAGS3, PERCON2_BIT ;Ch10 PERCUSSION ON Ch2. GOTO SCANEND ; ;........................................................................................................................................................................................ CHD5J5: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD5J51 ; BTFSS RECFLAGS8, REC_CHD11_BIT; BRA CHD5J51 ; MOVLW 0x5E ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF CHORDFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x52 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; CHD5J51: ; MOVLW 0x52 ;EEPROM CHORD5 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD5J52 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; BSF RECFLAGS8, REC_CHD11_BIT ; MOVWF SNDTRI ; CHD5J52: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL CHORDSOUND5B ; ; BSF GENFLAGS3, PERCON2_BIT ;Ch10 PERCUSSION ON Ch2. GOTO SCANEND ; ;........................................................................................................................................................................................ CHORDINSTR6: ; BTFSS CHORD_ON_FLAGS, 5 ; GOTO CHORDINSOCT ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ CHD6J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGCH, FSW1_CHD6_BIT; MOVFF FSW1ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x64 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD6J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ CHD6J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGCH, FSW2_CHD6_BIT; MOVFF FSW2ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x65 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD6J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ CHD6J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGCH, FSW3_CHD6_BIT; MOVFF FSW3ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x66 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD6J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ CHD6J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGCH, FSW4_CHD6_BIT; MOVFF FSW4ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x67 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; CHD6J4: ;0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL CHORDSOUND6A ; ; BSF GENFLAGS3, PERCON2_BIT ;Ch10 PERCUSSION ON Ch2. GOTO SCANEND ; ;........................................................................................................................................................................................ CHD6J5: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD6J51 ; BTFSS RECFLAGS8, REC_CHD12_BIT ; BRA CHD6J51 ; MOVLW 0x5F ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF CHORDFXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x53 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; CHD6J51: ; MOVLW 0x53 ;EEPROM CHORD6 ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA CHD6J52 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; BSF RECFLAGS8, REC_CHD12_BIT ; MOVWF SNDTRI ; CHD6J52: ; MOVWF PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, CHDVEL0_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, CHDVEL0_FLAG ;CHORD VELOCITY TO ZERO. MOVLW 0xC1 ;PROG CHANGE CHAN 2. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL CHORDSOUND6B ; ; BSF GENFLAGS3, PERCON2_BIT ;Ch10 PERCUSSION ON Ch2. GOTO SCANEND ; ;......................................................................................................................................................................................... CHORDINSOCT: ; BTFSS CHORD_ON_FLAGS, 6 ; BRA CHORD8 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ CHD2RES1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG, FSW1_OCHD_BIT; MOVFF FSW1ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x78 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA CHD2RESFS ; CHD2RES1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ CHD2RES2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG, FSW2_OCHD_BIT; MOVFF FSW2ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x79 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA CHD2RESFS ; CHD2RES2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ CHD2RES3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG, FSW3_OCHD_BIT; MOVFF FSW3ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA CHD2RESFS ; CHD2RES3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ CHD2RES4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG, FSW4_OCHD_BIT; MOVFF FSW4ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA CHD2RESFS ; ; CHD2RES4: ; BTG GENFLAGS1, CHORDOCTBIT ;CHORD SOUND BANK SELECT. BTFSS GENFLAGS1, CHORDOCTBIT ; BSF DISPLAYREG, CHORDBANK ;CHORDOCTBIT=0=BANK A. LED IS ON. BTFSC GENFLAGS1, CHORDOCTBIT ; BCF DISPLAYREG, CHORDBANK ;CHORDOCTBIT=1=BANK B. LED IS OFF. ; BTFSC CHORD_FLAGS, CHORD1_FLAG; GOTO CHD1J4 ; BTFSC CHORD_FLAGS, CHORD2_FLAG; GOTO CHD2J4 ; BTFSC CHORD_FLAGS, CHORD3_FLAG; GOTO CHD3J4 ; BTFSC CHORD_FLAGS, CHORD4_FLAG; GOTO CHD4J4 ; BTFSC CHORD_FLAGS, CHORD5_FLAG; GOTO CHD5J4 ; BTFSC CHORD_FLAGS, CHORD6_FLAG; GOTO CHD6J4 ; CHD2RESFS: ; GOTO SCANEND ; ;....................................................................................................................................................................................... CHORD8: ; BTFSS CHORD_ON_FLAGS, 7 ; GOTO RH11_SCAN ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ CHD8J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREGCH, FSW1_CHD8_BIT; MOVFF FSW1ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x64 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD8J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ CHD8J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREGCH, FSW2_CHD8_BIT; MOVFF FSW2ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x65 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD8J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ CHD8J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREGCH, FSW3_CHD8_BIT; MOVFF FSW3ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x66 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; CHD8J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ CHD8J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREGCH, FSW4_CHD8_BIT; MOVFF FSW4ASIGNREGCH, EEDATA ;VALUE TO WRITE. MOVLW 0x67 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; CHD8J4: ;0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH1_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH1_FLAG;RH1 MUTE (BLANK SOUND). MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL RH1SOUND1 ; ; BCF GENFLAGS1, RH1OCTBIT ; BCF GENFLAGS5, RH1OCTUPBIT ;UP OCTAVE OFF. ; BCF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BCF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. ; GOTO SCANEND ; RH11INSTR2: ;........................................................................................................................................................................................ BTFSS WREG, 1 ; GOTO RH11INSTR3 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH112J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG11, FSW1_RH112_BIT; MOVFF FSW1ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x68 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH112J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH112J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG11, FSW2_RH112_BIT; MOVFF FSW2ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x69 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH112J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH112J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG11, FSW3_RH112_BIT; MOVFF FSW3ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH112J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH112J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG11, FSW4_RH112_BIT; MOVFF FSW4ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH112J4: ;< CALL RH1SOUND2L2 ; ;....... BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH112J41 ; BTFSS RECFLAGS3, REC_RH12_BIT ; BRA RH112J41 ; MOVLW 0x31 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH1FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x0D ;EEPROM ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH112J41: ; MOVLW 0x0D ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH112J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. BSF RECFLAGS3, REC_RH12_BIT ; CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVFF EEDATA, SNDTRI ; RH112J42: ;................................................. BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH112J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x02 ;CLEARANCE MASK. ANDWF RH11ONOFF_FLAGS, F ;CLEAR OTHER RH1 INSTRUMENTS. CLRF RH12ONOFF_FLAGS ;CLEAR OTHER RH1 INSTRUMENTS. BTG RH11ONOFF_FLAGS, 1 ; BTFSS RH11ONOFF_FLAGS, 1 ; BSF GENFLAGS1, MUTE1_FLAG ; BTFSC RH11ONOFF_FLAGS, 1 ; BCF GENFLAGS1, MUTE1_FLAG ; ; BTFSS GENFLAGS1, MUTE1_FLAG ; BRA RH112LEDON ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. ; BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. BRA RH112J5 ; RH112LEDON: ; BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON . BTFSC MIDISTAT2, CH5COND_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;Ch5 ON AS WELL. RH112J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH1_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH1_FLAG;RH1 MUTE (BLANK SOUND). MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL RH1SOUND2 ; ; BCF GENFLAGS1, RH1OCTBIT ; BCF GENFLAGS5, RH1OCTUPBIT ;UP OCTAVE OFF. ; BTFSS GENFLAGS1, MUTE1_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BSF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. ; ;BTFSC GENFLAGS1, MUTE1_FLAG ;STOPS BUTTON PRESS ENABLING Ch5. ;BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. GOTO SCANEND ; ;........................................................................................................................................................................................ RH11INSTR3: ; BTFSS WREG, 2 ; BRA RH11INSTR4 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH113J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG11, FSW1_RH113_BIT; MOVFF FSW1ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x68 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH113J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH113J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG11, FSW2_RH113_BIT; MOVFF FSW2ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x69 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH113J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH113J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG11, FSW3_RH113_BIT; MOVFF FSW3ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH113J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH113J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG11, FSW4_RH113_BIT; MOVFF FSW4ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH113J4: ; CALL RH1SOUND3L2 ; ;............... BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH113J41 ; BTFSS RECFLAGS3, REC_RH13_BIT ; BRA RH113J41 ; MOVLW 0x32 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH1FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x0E ;EEPROM ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH113J41: ; MOVLW 0x0E ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. ????? ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH113J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. BSF RECFLAGS3, REC_RH13_BIT ; CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVFF EEDATA, SNDTRI ; RH113J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH113J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x04 ;CLEARANCE MASK. ANDWF RH11ONOFF_FLAGS, F ;CLEAR OTHER RH1 INSTRUMENTS. CLRF RH12ONOFF_FLAGS ;CLEAR OTHER RH1 INSTRUMENTS. BTG RH11ONOFF_FLAGS, 2 ; BTFSS RH11ONOFF_FLAGS, 2 ; BSF GENFLAGS1, MUTE1_FLAG ; BTFSC RH11ONOFF_FLAGS, 2 ; BCF GENFLAGS1, MUTE1_FLAG ; ;MUTE RH1. BTFSS GENFLAGS1, MUTE1_FLAG ; BRA RH113LEDON ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. ; BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. BRA RH113J5 ; RH113LEDON: ; BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON . BTFSC MIDISTAT2, CH5COND_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;Ch5 ON AS WELL. RH113J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH1_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH1_FLAG;RH1 MUTE (BLANK SOUND). MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; ; CALL RH1SOUND3 ; ; BCF GENFLAGS1, RH1OCTBIT ; BCF GENFLAGS5, RH1OCTUPBIT ;UP OCTAVE OFF. ; BTFSS GENFLAGS1, MUTE1_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BSF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. ; ;BTFSC GENFLAGS1, MUTE1_FLAG ;STOPS BUTTON PRESS ENABLING Ch5. ;BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. GOTO SCANEND ; ;........................................................................................................................................................................................ RH11INSTR4: ; BTFSS WREG, 3 ; GOTO RH11INSTR5 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH114J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG11, FSW1_RH114_BIT; MOVFF FSW1ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x68 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH114J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH114J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG11, FSW2_RH114_BIT; MOVFF FSW2ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x69 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH114J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH114J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG11, FSW3_RH114_BIT; MOVFF FSW3ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH114J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH114J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG11, FSW4_RH114_BIT; MOVFF FSW4ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH114J4: ; CALL RH1SOUND4L2 ; ;........... BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH114J41 ; BTFSS RECFLAGS3, REC_RH14_BIT ; BRA RH114J41 ; MOVLW 0x33 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH1FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x0F ;EEPROM ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH114J41: ; MOVLW 0x0F ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH114J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. BSF RECFLAGS3, REC_RH14_BIT ; CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVFF EEDATA, SNDTRI ; RH114J42: ;......................... BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH114J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x08 ;4th CLEARANCE MASK. ANDWF RH11ONOFF_FLAGS, F ;CLEAR OTHER RH1 INSTRUMENTS. CLRF RH12ONOFF_FLAGS ;CLEAR OTHER RH1 INSTRUMENTS. BTG RH11ONOFF_FLAGS, 3 ; BTFSS RH11ONOFF_FLAGS, 3 ; BSF GENFLAGS1, MUTE1_FLAG ; BTFSC RH11ONOFF_FLAGS, 3 ; BCF GENFLAGS1, MUTE1_FLAG ; ;MUTE RH1. BTFSS GENFLAGS1, MUTE1_FLAG ; BRA RH114LEDON ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. ; BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. BRA RH114J5 ; RH114LEDON: ; BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON . BTFSC MIDISTAT2, CH5COND_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;Ch5 ON AS WELL. RH114J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH1_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH1_FLAG;RH1 MUTE (BLANK SOUND). MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL RH1SOUND4 ; ; BCF GENFLAGS1, RH1OCTBIT ; BCF GENFLAGS5, RH1OCTUPBIT ;UP OCTAVE OFF. ; BTFSS GENFLAGS1, MUTE1_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BSF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. ; ;BTFSC GENFLAGS1, MUTE1_FLAG ;STOPS BUTTON PRESS ENABLING Ch5. ;BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. GOTO SCANEND ; ;......................................................................................................................................................................................... RH11INSTR5: ; BTFSS WREG, 4 ; GOTO RH11INSTR6 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH115J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG11, FSW1_RH115_BIT; MOVFF FSW1ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x68 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH115J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH115J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG11, FSW2_RH115_BIT; MOVFF FSW2ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x69 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH115J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH115J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG11, FSW3_RH115_BIT; MOVFF FSW3ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH115J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH115J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG11, FSW4_RH115_BIT; MOVFF FSW4ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH115J4: ; ;........ BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH115J41 ; BTFSS RECFLAGS3, REC_RH15_BIT ; BRA RH115J41 ; MOVLW 0x34 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH1FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x10 ;EEPROM ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH115J41: ; CALL RH1SOUND5L2 ; ; MOVLW 0x10 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH115J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. BSF RECFLAGS3, REC_RH15_BIT ; CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVFF EEDATA, SNDTRI ; RH115J42: ;.................................. BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH115J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x10 ;5th CLEARANCE MASK. ANDWF RH11ONOFF_FLAGS, F ;CLEAR OTHER RH1 INSTRUMENTS. CLRF RH12ONOFF_FLAGS ;CLEAR OTHER RH1 INSTRUMENTS. BTG RH11ONOFF_FLAGS, 4 ; BTFSS RH11ONOFF_FLAGS, 4 ; BSF GENFLAGS1, MUTE1_FLAG ; BTFSC RH11ONOFF_FLAGS, 4 ; BCF GENFLAGS1, MUTE1_FLAG ; ;MUTE RH1. BTFSS GENFLAGS1, MUTE1_FLAG ; BRA RH115LEDON ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. ; BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. BRA RH115J5 ; RH115LEDON: ; BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON . BTFSC MIDISTAT2, CH5COND_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;Ch5 ON AS WELL. RH115J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH1_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH1_FLAG;RH1 MUTE (BLANK SOUND). MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; ; CALL RH1SOUND5 ; ; BCF GENFLAGS1, RH1OCTBIT ; ; BTFSS GENFLAGS1, MUTE1_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BSF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. ; ;BTFSC GENFLAGS1, MUTE1_FLAG ;STOPS BUTTON PRESS ENABLING Ch5. ; BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. GOTO SCANEND ; ;........................................................................................................................................................................................ RH11INSTR6: ; BTFSS WREG, 5 ; GOTO RH11INSOCT ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH116J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG11, FSW1_RH116_BIT; MOVFF FSW1ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x68 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH116J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH116J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG11, FSW2_RH116_BIT; MOVFF FSW2ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x69 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH116J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH116J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG11, FSW3_RH116_BIT; MOVFF FSW3ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH116J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH116J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG11, FSW4_RH116_BIT; MOVFF FSW4ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH116J4: ;..................... CALL RH1SOUND6L2 ;SEND SOUND'S PARAMETERS. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH116J41 ; BTFSS RECFLAGS3, REC_RH16_BIT ; BRA RH116J41 ; MOVLW 0x35 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH1FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x11 ;EEPROM ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH116J41: ; MOVLW 0x11 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH116J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. BSF RECFLAGS3, REC_RH16_BIT ; CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ; CLRF RECFLAGS8 ; MOVFF EEDATA, SNDTRI ; RH116J42: ;........................... BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH116J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x20 ;6th CLEARANCE MASK. ANDWF RH11ONOFF_FLAGS, F ;CLEAR OTHER RH1 INSTRUMENTS. CLRF RH12ONOFF_FLAGS ;CLEAR OTHER RH1 INSTRUMENTS. BTG RH11ONOFF_FLAGS, 5 ; BTFSS RH11ONOFF_FLAGS, 5 ; BSF GENFLAGS1, MUTE1_FLAG ; BTFSC RH11ONOFF_FLAGS, 5 ; BCF GENFLAGS1, MUTE1_FLAG ; ;MUTE RH1. BTFSS GENFLAGS1, MUTE1_FLAG ; BRA RH116LEDON ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. ; BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. BRA RH116J5 ; RH116LEDON: ; BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON . BTFSC MIDISTAT2, CH5COND_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;Ch5 ON AS WELL. RH116J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH1_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH1_FLAG;RH1 MUTE (BLANK SOUND). MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL RH1SOUND6 ; ; BCF GENFLAGS1, RH1OCTBIT ; BCF GENFLAGS5, RH1OCTUPBIT ;UP OCTAVE OFF. ; BTFSS GENFLAGS1, MUTE1_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BSF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. ; BTFSC GENFLAGS2, CH5ON_FLAG ;LAYER 3 COMES ON/OFF WITH LAYER 2. BSF GENFLAGS8, RH1L3EN ; BTFSS GENFLAGS2, CH5ON_FLAG ; BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH11INSOCT: ; BTFSS WREG, 6 ; GOTO RH118 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH11RES1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG, FSW1_ORH1_BIT; MOVFF FSW1ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x78 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH11RESFS ; RH11RES1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH11RES2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG, FSW2_ORH1_BIT; MOVFF FSW2ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x79 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH11RESFS ; RH11RES2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH11RES3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG, FSW3_ORH1_BIT; MOVFF FSW3ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH11RESFS ; RH11RES3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH11RES4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG, FSW4_ORH1_BIT; MOVFF FSW4ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH11RESFS ; RH11RES4: ;< BCF GENFLAGS6, RHINSTCHNG ;STOP RH CHANGE ALERT. BTG GENFLAGS1, RH1OCTBIT ; MOVLW 0xB0 ; MOVWF NORPN1 ;COARSE TUNNING IN SEMITONES. MOVLW 0x65 ; MOVWF NORPN2 ; MOVLW 0x00 ; MOVWF NORPN3 ; MOVLW 0x64 ; MOVWF NORPN4 ; MOVLW 0x02 ; MOVWF NORPN5 ; MOVLW 0x06 ; MOVWF NORPN6 ; ; BTFSS GENFLAGS5, RH1OCTUPBIT ;OCTAVE UP BIT. BRA RH1OCTSEL ; MOVLW 0x4C ; BTFSS GENFLAGS1, RH1OCTBIT ; MOVLW 0x34 ; BRA RH1OCTSEL2 ; RH1OCTSEL: ; MOVLW 0x40 ; BTFSC GENFLAGS1, RH1OCTBIT ; MOVLW 0x34 ; RH1OCTSEL2: ; MOVWF NORPN7 ; BSF GENFLAGS1, NORPN_FLAG ; ; RH11RESFS: ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH118: ;PITCH-BEND. BTFSS WREG, 7 ; BRA RH12_SCAN ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH118J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG11, FSW1_RH118_BIT; MOVFF FSW1ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x68 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH118J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH118J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG11, FSW2_RH118_BIT; MOVFF FSW2ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x69 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH118J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH118J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG11, FSW3_RH118_BIT; MOVFF FSW3ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH118J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH118J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG11, FSW4_RH118_BIT; MOVFF FSW4ASIGNREG11, EEDATA ;VALUE TO WRITE. MOVLW 0x6B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH118J4: ;0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH1_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH1_FLAG;RH1 MUTE (BLANK SOUND). MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SEND FLAG. ; CALL RH1SOUND7 ; ; BSF GENFLAGS1, RH1OCTBIT ; BCF GENFLAGS5, RH1OCTUPBIT ;UP OCTAVE OFF. ; BTFSS GENFLAGS1, MUTE1_FLAG ;STOPS BUTTON PRESS ENABLING Ch5. BSF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BSF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. ; ;BTFSC GENFLAGS1, MUTE1_FLAG ;STOPS BUTTON PRESS ENABLING Ch5. ; BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. GOTO SCANEND ; ;........................................................................................................................................................................................ RH12INSTR2: ; BTFSS WREG, 1 ; BRA RH12INSTR3 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH122J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG12, FSW1_RH122_BIT; MOVFF FSW1ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6C ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH122J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH122J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG12, FSW2_RH122_BIT; MOVFF FSW2ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6D ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH122J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH122J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG12, FSW3_RH122_BIT; MOVFF FSW3ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6E ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH122J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH122J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG12, FSW4_RH122_BIT; MOVFF FSW4ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6F ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH122J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH122J41 ; BTFSS RECFLAGS4, REC_RH18_BIT ; BRA RH122J41 ; MOVLW 0x37 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH1FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x13 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH122J41: ; MOVLW 0x13 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH122J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. BSF RECFLAGS4, REC_RH18_BIT ; CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. MOVFF EEDATA, SNDTRI ; RH122J42: ;.......................... BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH122J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x02 ;2nd BUTTON MASK. ANDWF RH12ONOFF_FLAGS, F ;CLEAR OTHER RH1 INSTRUMENTS. CLRF RH11ONOFF_FLAGS ;CLEAR OTHER RH1 INSTRUMENTS. BTG RH12ONOFF_FLAGS, 1 ; BTFSS RH12ONOFF_FLAGS, 1 ; BSF GENFLAGS1, MUTE1_FLAG ; BTFSC RH12ONOFF_FLAGS, 1 ; BCF GENFLAGS1, MUTE1_FLAG ; ;MUTE RH1. BTFSS GENFLAGS1, MUTE1_FLAG ; BRA RH122LEDON ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. ; BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. BRA RH122J5 ; RH122LEDON: ; BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON . BTFSC MIDISTAT2, CH5COND_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;Ch5 ON AS WELL. RH122J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; ; CALL RH1SOUND8 ; ; BCF GENFLAGS1, RH1OCTBIT ; BCF GENFLAGS5, RH1OCTUPBIT ;UP OCTAVE OFF. ; BCF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BCF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. GOTO SCANEND ; ;........................................................................................................................................................................................ RH12INSTR3: ; BTFSS WREG, 2 ; GOTO RH12INSTR4 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH123J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG12, FSW1_RH123_BIT; MOVFF FSW1ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6C ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH123J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH123J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG12, FSW2_RH123_BIT; MOVFF FSW2ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6D ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH123J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH123J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG12, FSW3_RH123_BIT; MOVFF FSW3ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6E ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH123J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH123J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG12, FSW4_RH123_BIT; MOVFF FSW4ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6F ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH123J4: ; CALL RH1SOUND9L2 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH123J41 ; BTFSS RECFLAGS4, REC_RH19_BIT ; BRA RH123J41 ; MOVLW 0x38 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH1FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x14 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH123J41: ; MOVLW 0x14 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH123J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. BSF RECFLAGS4, REC_RH19_BIT ; CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. MOVFF EEDATA, SNDTRI ; RH123J42: ;....................... BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH123J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x04 ;3rd BUTTON MASK. ANDWF RH12ONOFF_FLAGS, F ;CLEAR OTHER RH1 INSTRUMENTS. CLRF RH11ONOFF_FLAGS ;CLEAR OTHER RH1 INSTRUMENTS. BTG RH12ONOFF_FLAGS, 2 ; BTFSS RH12ONOFF_FLAGS, 2 ; BSF GENFLAGS1, MUTE1_FLAG ; BTFSC RH12ONOFF_FLAGS, 2 ; BCF GENFLAGS1, MUTE1_FLAG ; ;MUTE RH1. BTFSS GENFLAGS1, MUTE1_FLAG ; BRA RH123LEDON ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. ; BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. BRA RH123J5 ; RH123LEDON: ; BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON . BTFSC MIDISTAT2, CH5COND_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;Ch5 ON AS WELL. RH123J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH1_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH1_FLAG;RH1 MUTE (BLANK SOUND). MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; ; CALL RH1SOUND9 ; ; BCF GENFLAGS1, RH1OCTBIT ; BCF GENFLAGS5, RH1OCTUPBIT ;UP OCTAVE OFF. ; BTFSS GENFLAGS1, MUTE1_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BSF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. ; BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. GOTO SCANEND ; ;........................................................................................................................................................................................ RH12INSTR4: ; BTFSS WREG, 3 ; BRA RH12INSTR5 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH124J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG12, FSW1_RH124_BIT; MOVFF FSW1ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6C ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH124J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH124J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG12, FSW2_RH124_BIT; MOVFF FSW2ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6D ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH124J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH124J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG12, FSW3_RH124_BIT; MOVFF FSW3ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6E ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH124J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH124J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG12, FSW4_RH124_BIT; MOVFF FSW4ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6F ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH124J4: ; CALL RH1SOUND10L2 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH124J41 ; BTFSS RECFLAGS4, REC_RH110_BIT ; BRA RH124J41 ; MOVLW 0x39 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH1FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x15 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH124J41: ; MOVLW 0x15 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH124J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. BSF RECFLAGS4, REC_RH110_BIT; CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. MOVFF EEDATA, SNDTRI ; RH124J42: ;........................ BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH124J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x08 ;4th BUTTON MASK. ANDWF RH12ONOFF_FLAGS, F ;CLEAR OTHER RH1 INSTRUMENTS. CLRF RH11ONOFF_FLAGS ;CLEAR OTHER RH1 INSTRUMENTS. BTG RH12ONOFF_FLAGS, 3 ; BTFSS RH12ONOFF_FLAGS, 3 ; BSF GENFLAGS1, MUTE1_FLAG ; BTFSC RH12ONOFF_FLAGS, 3 ; BCF GENFLAGS1, MUTE1_FLAG ; ;MUTE RH1. BTFSS GENFLAGS1, MUTE1_FLAG ; BRA RH124LEDON ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. ; BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. BRA RH124J5 ; RH124LEDON: ; BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON . BTFSC MIDISTAT2, CH5COND_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;Ch5 ON AS WELL. RH124J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH1_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH1_FLAG;RH1 MUTE (BLANK SOUND). MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; ; CALL RH1SOUND10 ; ; BCF GENFLAGS1, RH1OCTBIT ; BCF GENFLAGS5, RH1OCTUPBIT ;UP OCTAVE OFF. ; BTFSS GENFLAGS1, MUTE1_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BSF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. ; ;BTFSC GENFLAGS1, MUTE1_FLAG ; ;BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. GOTO SCANEND ; ;........................................................................................................................................................................................ RH12INSTR5: ; BTFSS WREG, 4 ; BRA RH12INSTR6 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH125J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG12, FSW1_RH125_BIT; MOVFF FSW1ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6C ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH125J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH125J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG12, FSW2_RH125_BIT; MOVFF FSW2ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6D ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH125J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH125J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG12, FSW3_RH125_BIT; MOVFF FSW3ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6E ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH125J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH125J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG12, FSW4_RH125_BIT; MOVFF FSW4ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6F ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH125J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH125J41 ; BTFSS RECFLAGS4, REC_RH111_BIT; BRA RH125J41 ; MOVLW 0x3A ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH1FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x16 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH125J41: ; MOVLW 0x16 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH125J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. BSF RECFLAGS4, REC_RH111_BIT; CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. MOVFF EEDATA, SNDTRI ; RH125J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH125J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x10 ;1st BUTTON MASK. ANDWF RH12ONOFF_FLAGS, F ;CLEAR OTHER RH1 INSTRUMENTS. CLRF RH11ONOFF_FLAGS ;CLEAR OTHER RH1 INSTRUMENTS. BTG RH12ONOFF_FLAGS, 4 ; BTFSS RH12ONOFF_FLAGS, 4 ; BSF GENFLAGS1, MUTE1_FLAG ; BTFSC RH12ONOFF_FLAGS, 4 ; BCF GENFLAGS1, MUTE1_FLAG ; ;MUTE RH1. BTFSS GENFLAGS1, MUTE1_FLAG ; BRA RH125LEDON ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. ; BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. BRA RH125J5 ; RH125LEDON: ; BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON . BTFSC MIDISTAT2, CH5COND_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;Ch5 ON AS WELL. RH125J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH1_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH1_FLAG;RH1 MUTE (BLANK SOUND). MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; ; CALL RH1SOUND11 ; ; BCF GENFLAGS1, RH1OCTBIT ; BCF GENFLAGS5, RH1OCTUPBIT ;UP OCTAVE OFF. ; BCF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BCF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. ; ;BTFSC GENFLAGS1, MUTE1_FLAG ;STOPS BUTTON PRESS ENABLING Ch5. ;BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. GOTO SCANEND ; ;........................................................................................................................................................................................ RH12INSTR6: ; BTFSS WREG, 5 ; BRA RH12INSMUTE ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH126J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG12, FSW1_RH126_BIT; MOVFF FSW1ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6C ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH126J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH126J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG12, FSW2_RH126_BIT; MOVFF FSW2ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6D ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH126J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH126J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG12, FSW3_RH126_BIT; MOVFF FSW3ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6E ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH126J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH126J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG12, FSW4_RH126_BIT; MOVFF FSW4ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6F ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH126J4: ; CALL RH1SOUND12L2 ; ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH126J41 ; BTFSS RECFLAGS4, REC_RH112_BIT ; BRA RH126J41 ; MOVLW 0x3B ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH1FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x17 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH126J41: ; MOVLW 0x17 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH126J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. BSF RECFLAGS4, REC_RH112_BIT; CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. MOVFF EEDATA, SNDTRI ; RH126J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH126J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x20 ;1st BUTTON MASK. ANDWF RH12ONOFF_FLAGS, F ;CLEAR OTHER RH1 INSTRUMENTS. CLRF RH11ONOFF_FLAGS ;CLEAR OTHER RH1 INSTRUMENTS. BTG RH12ONOFF_FLAGS, 5 ; BTFSS RH12ONOFF_FLAGS, 5 ; BSF GENFLAGS1, MUTE1_FLAG ; BTFSC RH12ONOFF_FLAGS, 5 ; BCF GENFLAGS1, MUTE1_FLAG ; ;MUTE RH1. BTFSS GENFLAGS1, MUTE1_FLAG ; BRA RH126LEDON ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. ; BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. BRA RH126J5 ; RH126LEDON: ; BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON . BTFSC MIDISTAT2, CH5COND_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;Ch5 ON AS WELL. RH126J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH1_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH1_FLAG;RH1 MUTE (BLANK SOUND). MOVLW 0xC0 ;PROG CHANGE CHAN 1. MOVWF PROGCHHOLD1 ; ; CALL RH1SOUND12 ; ; BTFSS GENFLAGS1, MUTE1_FLAG ;STOPS BUTTON PRESS ENABLING Ch5. BSF GENFLAGS2, CH5ON_FLAG ;EXTRA LAYER ON Ch5 ON OR OFF. BSF MIDISTAT2, CH5COND_FLAG ;HOLDS CH5 ON/OFF STATUS. ; ;BTFSC GENFLAGS1, MUTE1_FLAG ;STOPS BUTTON PRESS ENABLING Ch5. ;BCF GENFLAGS8, RH1L3EN ;TURN OFF RH1 LAYER 3. ; BCF GENFLAGS1, RH1OCTBIT ; BCF GENFLAGS5, RH1OCTUPBIT ;UP OCTAVE OFF. ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH12INSMUTE: ; BTFSS WREG, 6 ;MUTE RH1 BUTTON. BRA RH128 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH12RES1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG, FSW1_MRH1_BIT; MOVFF FSW1ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x78 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH1END ; RH12RES1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH12RES2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG, FSW2_MRH1_BIT; MOVFF FSW2ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x79 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH1END ; RH12RES2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH12RES3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG, FSW3_MRH1_BIT; MOVFF FSW3ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH1END ; RH12RES3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH12RES4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG, FSW4_MRH1_BIT; MOVFF FSW4ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH1END ; ; RH12RES4: ;< BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE. BRA RH127J1 ; BSF GENFLAGS10, STM_MUTDEC_FLAG; BRA RH1END ; RH127J1: ; ;............. BCF GENFLAGS6, RHINSTCHNG ;STOP RH CHANGE ALERT. BTFSS GENFLAGS3, MUTOG_FLAG ; BRA RH12MT ; BCF GENFLAGS3, MUTOG_FLAG ;NORMAL MUTE. BRA RH1END ; RH12MT: ; BTG GENFLAGS1, MUTE1_FLAG ; BTFSS GENFLAGS1, MUTE1_FLAG ; BRA RH12LEDON ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. ; BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF AS WELL. ; CLRF RH12ONOFF_FLAGS ; CLRF RH11ONOFF_FLAGS ; GOTO SCANEND ; RH12LEDON: ; BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON . BTFSC MIDISTAT2, CH5COND_FLAG ; BSF GENFLAGS2, CH5ON_FLAG ;Ch5 ON AS WELL. RH1END: ; GOTO SCANEND ; ;........................................................................................ RH128: ;SOLO BUTTON. BTFSS WREG, 7 ; BRA RH21_SCAN ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH128J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG12, FSW1_RH128_BIT; MOVFF FSW1ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6C ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH1END ; RH128J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH128J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG12, FSW2_RH128_BIT; MOVFF FSW2ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6D ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH1END ; RH128J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH128J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG12, FSW3_RH128_BIT; MOVFF FSW3ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6E ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH1END ; RH128J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH128J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG12, FSW4_RH128_BIT; MOVFF FSW4ASIGNREG12, EEDATA ;VALUE TO WRITE. MOVLW 0x6F ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH128END ; ; RH128J4: ;< BTG GENFLAGS11, SOLOSTAT_BIT ; ; BTFSS GENFLAGS11, SOLOSTAT_BIT ; BRA RH128J10 ; MOVLW 0xEA ;EEPROM SOLO VOLUME ADDRESS. CALL EEPROM_READ ; MOVWF SOLOVAL ; CALL SEND_EXPR ;SEND SOLO VALUE. BCF GENFLAGS6, RHINSTCHNG ;STOP (NO) RH CHANGE ALERT (TO LEAVE TREM ON). BRA RH128END ; ; RH128J10: ; MOVLW 0x58 ; MOVWF SOLOVAL ; CALL SEND_EXPR ;SEND NORMALDFAULT VOLUME VALUE. ; BCF GENFLAGS6, RHINSTCHNG ;STOP (NO) RH CHANGE ALERT (TO LEAVE TREM ON). RH128END: ; GOTO SCANEND ; ;................................................................................................................................................................................................................ RH21_SCAN: ; MOVLW 0x02 ;RB1, ENABLE RH21 BUSS. MOVWF PORTB ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ;TO WREG. CLRF PORTB ; MOVWF SCANTEMP1 ; XORWF RH21SCANHOLD, 0 ;RESULT IN W. MOVFF SCANTEMP1, RH21SCANHOLD ; BNZ RH210J1 ;NO CHANGE IN SCAN. GOTO RH22_SCAN ;NO CHANGE IN SCAN. RH210J1: ; MOVFF RH21SCANHOLD, RH21_OFF_FLAGS ; COMF RH21_OFF_FLAGS, F ; ANDWF RH21_OFF_FLAGS, F ;CHANGES TO OFF STORED. ; ANDWF SCANTEMP1, W ;CHANGE TO ON NOW IN W. MOVWF RH21_ON_FLAGS ;STORE CHANGES TO ON. BZ RH210J2 ; BSF GENFLAGS6, RHINSTCHNG ; BSF GENFLAGS10, DIP_CHNG_LED ;Dip control change led. RH210J2: ; ;........................................................................ BTFSS WREG, 0 ; GOTO RH21INSTR2 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH211J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG21, FSW1_RH211_BIT; MOVFF FSW1ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x70 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH211J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH211J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG21, FSW2_RH211_BIT; MOVFF FSW2ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x71 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH211J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH211J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG21, FSW3_RH211_BIT; MOVFF FSW3ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x72 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH211J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH211J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG21, FSW4_RH211_BIT; MOVFF FSW4ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x73 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH211J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH211J41 ; BTFSS RECFLAGS5, REC_RH21_BIT ; BRA RH211J41 ; MOVLW 0x3C ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x18 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH211J41: ; MOVLW 0x18 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH211J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. BSF RECFLAGS5, REC_RH21_BIT ; CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. MOVFF EEDATA, SNDTRI ; RH211J42: ;.......................... BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH211J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x01 ;1st BUTTON MASK. ANDWF RH21ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH22ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH21ONOFF_FLAGS, 0 ; BTFSS RH21ONOFF_FLAGS, 0 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH21ONOFF_FLAGS, 0 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH1. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH211LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH211J5 ; RH211LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH211J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SEND FLAG. ; CALL RH2SOUND1 ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH21INSTR2: ; BTFSS WREG, 1 ; BRA RH21INSTR3 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH212J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG21, FSW1_RH212_BIT; MOVFF FSW1ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x70 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH212J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH212J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG21, FSW2_RH212_BIT; MOVFF FSW2ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x71 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH212J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH212J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG21, FSW3_RH212_BIT; MOVFF FSW3ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x72 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH212J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH212J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG21, FSW4_RH212_BIT; MOVFF FSW4ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x73 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH212J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH212J41 ; BTFSS RECFLAGS5, REC_RH22_BIT ; BRA RH212J41 ; MOVLW 0x3D ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x19 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH212J41: ; MOVLW 0x19 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH212J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. BSF RECFLAGS5, REC_RH22_BIT ; CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. MOVFF EEDATA, SNDTRI ; RH212J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH212J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x02 ;1st BUTTON MASK. ANDWF RH21ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH22ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH21ONOFF_FLAGS, 1 ; BTFSS RH21ONOFF_FLAGS, 1 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH21ONOFF_FLAGS, 1 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH2. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH212LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH212J5 ; RH212LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH212J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL RH2SOUND2 ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH21INSTR3: ; BTFSS WREG, 2 ; GOTO RH21INSTR4 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH213J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG21, FSW1_RH213_BIT; MOVFF FSW1ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x70 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH213J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH213J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG21, FSW2_RH213_BIT; MOVFF FSW2ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x71 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH213J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH213J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG21, FSW3_RH213_BIT; MOVFF FSW3ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x72 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH213J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH213J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG21, FSW4_RH213_BIT; MOVFF FSW4ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x73 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH213J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH213J41 ; BTFSS RECFLAGS5, REC_RH23_BIT ; BRA RH213J41 ; MOVLW 0x3E ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x1A ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH213J41: ; MOVLW 0x1A ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA . ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH213J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. BSF RECFLAGS5, REC_RH23_BIT ; CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. MOVFF EEDATA, SNDTRI ; RH213J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH213J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x04 ;3rd BUTTON MASK. ANDWF RH21ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH22ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH21ONOFF_FLAGS, 2 ; BTFSS RH21ONOFF_FLAGS, 2 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH21ONOFF_FLAGS, 2 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH2. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH213LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH213J5 ; RH213LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH213J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL RH2SOUND3 ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH21INSTR4: ; BTFSS WREG, 3 ; GOTO RH21INSTR5 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH214J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG21, FSW1_RH214_BIT; MOVFF FSW1ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x70 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH214J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH214J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG21, FSW2_RH214_BIT; MOVFF FSW2ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x71 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH214J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH214J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG21, FSW3_RH214_BIT; MOVFF FSW3ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x72 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH214J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH214J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG21, FSW4_RH214_BIT; MOVFF FSW4ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x73 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH214J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH214J41 ; BTFSS RECFLAGS5, REC_RH24_BIT ; BRA RH214J41 ; MOVLW 0x3F ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x1B ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH214J41: ; MOVLW 0x1B ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH214J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. BSF RECFLAGS5, REC_RH24_BIT ; CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. MOVFF EEDATA, SNDTRI ; RH214J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH214J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x08 ;4th BUTTON MASK. ANDWF RH21ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH22ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH21ONOFF_FLAGS, 3 ; BTFSS RH21ONOFF_FLAGS, 3 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH21ONOFF_FLAGS, 3 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH2. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH214LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH214J5 ; RH214LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH214J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL RH2SOUND4 ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH21INSTR5: ; BTFSS WREG, 4 ; GOTO RH21INSTR6 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH215J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG21, FSW1_RH215_BIT; MOVFF FSW1ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x70 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH215J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH215J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG21, FSW2_RH215_BIT; MOVFF FSW2ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x71 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH215J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH215J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG21, FSW3_RH215_BIT; MOVFF FSW3ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x72 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH215J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH215J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG21, FSW4_RH215_BIT; MOVFF FSW4ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x73 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH215J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH215J41 ; BTFSS RECFLAGS5, REC_RH25_BIT ; BRA RH215J41 ; MOVLW 0x40 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x1C ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH215J41: ; MOVLW 0x1C ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN WREG. ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH215J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. BSF RECFLAGS5, REC_RH25_BIT ; CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. MOVFF EEDATA, SNDTRI ; RH215J42: ;................. BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH215J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x10 ;5th BUTTON MASK. ANDWF RH21ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH22ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH21ONOFF_FLAGS, 4 ; BTFSS RH21ONOFF_FLAGS, 4 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH21ONOFF_FLAGS, 4 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH2. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH215LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH215J5 ; RH215LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH215J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SEND FLAG. ; CALL RH2SOUND5 ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH21INSTR6: ; BTFSS WREG, 5 ; GOTO RH21INSOCT ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH216J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG21, FSW1_RH216_BIT; MOVFF FSW1ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x70 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH216J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH216J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG21, FSW2_RH216_BIT; MOVFF FSW2ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x71 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH216J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH216J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG21, FSW3_RH216_BIT; MOVFF FSW3ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x72 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH216J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH216J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG21, FSW4_RH216_BIT; MOVFF FSW4ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x73 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH216J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH216J41 ; BTFSS RECFLAGS5, REC_RH26_BIT ; BRA RH216J41 ; MOVLW 0x41 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x1D ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH216J41: ; MOVLW 0x1D ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH216J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. BSF RECFLAGS5, REC_RH26_BIT ; CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. MOVFF EEDATA, SNDTRI ; RH216J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH216J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x20 ;1st BUTTON MASK. ANDWF RH21ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH22ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH21ONOFF_FLAGS, 5 ; BTFSS RH21ONOFF_FLAGS, 5 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH21ONOFF_FLAGS, 5 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH2. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH216LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH216J5 ; RH216LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH216J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL RH2SOUND6 ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH21INSOCT: ; BTFSS WREG, 6 ; GOTO RH218 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH21RES1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG, FSW1_ORH2_BIT; MOVFF FSW1ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x78 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH21RESFS ; RH21RES1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH21RES2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG, FSW2_ORH2_BIT; MOVFF FSW2ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x79 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH21RESFS ; RH21RES2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH21RES3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG, FSW3_ORH2_BIT; MOVFF FSW3ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH21RESFS ; RH21RES3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH21RES4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG, FSW4_ORH2_BIT; MOVFF FSW4ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH21RESFS ; RH21RES4: ; ; BCF GENFLAGS6, RHINSTCHNG ;STOP RH CHANGE ALERT. BTG GENFLAGS1, RH2OCTBIT ; MOVLW 0xB3 ;COARSE TUNNING DOWN 12 SENITONES. MOVWF NORPN1 ; MOVLW 0x65 ; MOVWF NORPN2 ; MOVLW 0x00 ; MOVWF NORPN3 ; MOVLW 0x64 ; MOVWF NORPN4 ; MOVLW 0x02 ; MOVWF NORPN5 ; MOVLW 0x06 ; MOVWF NORPN6 ; ; BTFSS GENFLAGS3, RH224OCTD_BIT ; BRA RH21OJ1 ; MOVLW 0x28 ; BTFSC GENFLAGS1, RH2OCTBIT ; MOVLW 0x34 ; BRA RH21OJ2 ; RH21OJ1: ; MOVLW 0x40 ; BTFSC GENFLAGS1, RH2OCTBIT ; MOVLW 0x34 ; RH21OJ2: ; MOVWF NORPN7 ; BSF GENFLAGS1, NORPN_FLAG ; RH21RESFS: ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH218: ;TREMOLO ON/OFF BUTTON. USES BTFSS WREG, 7 ; CHANNEL PRESSURE COMMANDS. GOTO RH22_SCAN ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH218J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG21, FSW1_RH218_BIT; MOVFF FSW1ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x70 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH218END ; RH218J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH218J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG21, FSW2_RH218_BIT; MOVFF FSW2ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x71 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH218END ; RH218J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH218J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG21, FSW3_RH218_BIT; MOVFF FSW3ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x72 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH218END ; RH218J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH218J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG21, FSW4_RH218_BIT; MOVFF FSW4ASIGNREG21, EEDATA ;VALUE TO WRITE. MOVLW 0x73 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; BRA RH218END ; RH218J4: ; BTFSC GENFLAGS7, TREMVOLED_BIT ; BRA RH218END ;NOW IN EDIT MODE BCF GENFLAGS6, RHINSTCHNG ;STOP RH CHANGE ALERT. ; BTG GENFLAGS7, TREMON_BIT ; BTFSS GENFLAGS7, TREMON_BIT ; BRA RH22TREMOFF ; ; BSF GENFLAGS6, SYSX11_B7_FLG;PUT NEW VALUE IN SYSX11BYTE7. MOVLW 0x25 ;SELECT CHANNEL 5 ! MOVWF SYSX11BYTE7 ; MOVLW 0x26 ;SELECT TREM DEPTH. MOVWF SYSX11BYTE8 ; MOVLW 0x7F ;MOD DEPTH VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG; MOVLW 0x24 ;SELECT CHANNEL 4 ! MOVWF SYSX11BYTE7 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG; MOVLW 0x21 ;SELECT CHANNEL 1 ! MOVWF SYSX11BYTE7 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; ; MOVLW 0xF5 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF TREMDEPTH ; ; MOVLW 0xF4 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF TREMSPEED ; ; MOVWF SYSX11BYTE9 ;MOD LFO RATE CONTROL. MOVLW 0x03 ; MOVWF SYSX11BYTE8 ; MOVLW 0x2F ;COMMON TO ALL CHANNELS. MOVWF SYSX11BYTE7 ; BSF GENFLAGS6, SYSX11_B7_FLG; CALL SYSX11BYTE ; ; MOVLW 0xD3 ;CHAN PRESSURE CH4. RHTREM10: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RHTREM10 ; MOVWF TXREG ;SEND MIDI. MOVF TREMDEPTH, W ;DATA BYTE. RHTREM11: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RHTREM11 ; MOVWF TXREG ;SEND MIDI. ; MOVLW 0xD4 ;CHAN PRESSURE CH5. RHTREM20: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RHTREM20 ; MOVWF TXREG ;SEND MIDI. MOVF TREMDEPTH, W ;DATA BYTE. RHTREM21: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RHTREM21 ; MOVWF TXREG ;SEND MIDI. ; MOVLW 0xD0 ;CHAN PRESSURE CH1. RHTREM30: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RHTREM30 ; MOVWF TXREG ;SEND MIDI. MOVF TREMDEPTH, W ;DATA BYTE. RHTREM31: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RHTREM31 ; MOVWF TXREG ;SEND MIDI. ; BRA RH218END ; ;........ RH22TREMOFF: ; BSF GENFLAGS6, SYSX11_B7_FLG; MOVLW 0x21 ;SELECT CHANNEL 1! MOVWF SYSX11BYTE7 ; MOVLW 0x26 ;SELECT TREM DEPTH. MOVWF SYSX11BYTE8 ; MOVLW 0x00 ;MOD DEPTH VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG; MOVLW 0x25 ;SELECT CHANNEL 5! MOVWF SYSX11BYTE7 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG; MOVLW 0x24 ;SELECT CHANNEL 4 ! MOVWF SYSX11BYTE7 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; RH218END: ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH22_SCAN: ; MOVLW 0x01 ;RB0, ENABLE RH27 BUSS. MOVWF PORTB ; NOP ; NOP ; NOP ; NOP ; MOVF PORTD, W ;TO WREG. CLRF PORTB ; MOVWF SCANTEMP1 ; XORWF RH27SCANHOLD, W ;RESULT IN W. MOVFF SCANTEMP1, RH27SCANHOLD ; BNZ RH220J1 ;CHANGE IN SCAN. GOTO FSWS ;NO CHANGE IN SCAN. RH220J1: ; MOVFF RH27SCANHOLD, RH22_OFF_FLAGS ; COMF RH22_OFF_FLAGS, F ; ANDWF RH22_OFF_FLAGS, F ;CHANGES TO OFF STORED. ; ANDWF SCANTEMP1, W ;CHANGE TO ON NOW IN W. MOVWF RH22_ON_FLAGS ; BZ RH220J2 ; BSF GENFLAGS6, RHINSTCHNG ; BSF GENFLAGS10, DIP_CHNG_LED ;Dip control change led. RH220J2: ; ;......................................................................................................................................................................... BTFSS RH22_ON_FLAGS, 0 ; BRA RH22INSTR2 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH221J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG22, FSW1_RH221_BIT; MOVFF FSW1ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x74 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH221J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH221J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG22, FSW2_RH221_BIT; MOVFF FSW2ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x75 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH221J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH221J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG22, FSW3_RH221_BIT; MOVFF FSW3ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x76 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH221J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH221J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG22, FSW4_RH221_BIT; MOVFF FSW4ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x77 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH221J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH221J41 ; BTFSS RECFLAGS6, REC_RH27_BIT ; BRA RH221J41 ; MOVLW 0x42 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x1E ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH221J41: ; MOVLW 0x1E ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN WREG. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH221J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. BSF RECFLAGS6, REC_RH27_BIT ; MOVFF EEDATA, SNDTRI ; RH221J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH221J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x01 ;1st BUTTON MASK. ANDWF RH22ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH21ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH22ONOFF_FLAGS, 0 ; BTFSS RH22ONOFF_FLAGS, 0 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH22ONOFF_FLAGS, 0 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH2. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH221LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH221J5 ; RH221LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH221J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL RH2SOUND7 ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH22INSTR2: ; BTFSS RH22_ON_FLAGS, 1 ; GOTO RH22INSTR3 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH222J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG22, FSW1_RH222_BIT; MOVFF FSW1ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x74 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH222J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH222J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG22, FSW2_RH222_BIT; MOVFF FSW2ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x75 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH222J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH222J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG22, FSW3_RH222_BIT; MOVFF FSW3ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x76 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH222J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH222J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG22, FSW4_RH222_BIT; MOVFF FSW4ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x77 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH222J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH222J41 ; BTFSS RECFLAGS6, REC_RH28_BIT ; BRA RH222J41 ; MOVLW 0x43 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x1F ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH222J41: ; MOVLW 0x1F ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN WREG. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH222J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. BSF RECFLAGS6, REC_RH28_BIT ; MOVFF EEDATA, SNDTRI ; RH222J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH222J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x02 ;1st BUTTON MASK. ANDWF RH22ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH21ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH22ONOFF_FLAGS, 1 ; BTFSS RH22ONOFF_FLAGS, 1 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH22ONOFF_FLAGS, 1 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH2. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH222LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH222J5 ; RH222LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH222J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL RH2SOUND8 ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH22INSTR3: ; BTFSS RH22_ON_FLAGS, 2 ; GOTO RH22INSTR4 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH223J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG22, FSW1_RH223_BIT; MOVFF FSW1ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x74 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH223J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH223J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG22, FSW2_RH223_BIT; MOVFF FSW2ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x75 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH223J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH223J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG22, FSW3_RH223_BIT; MOVFF FSW3ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x76 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH223J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH223J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG22, FSW4_RH223_BIT; MOVFF FSW4ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x77 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH223J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH223J41 ; BTFSS RECFLAGS6, REC_RH29_BIT ; BRA RH223J41 ; MOVLW 0x44 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x20 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH223J41: ; MOVLW 0x20 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH223J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. BSF RECFLAGS6, REC_RH29_BIT ; MOVFF EEDATA, SNDTRI ; RH223J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH223J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x04 ;3rd BUTTON MASK. ANDWF RH22ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH21ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH22ONOFF_FLAGS, 2 ; BTFSS RH22ONOFF_FLAGS, 2 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH22ONOFF_FLAGS, 2 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH2. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH223LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH223J5 ; RH223LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH223J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL RH2SOUND9 ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH22INSTR4: ; BTFSS RH22_ON_FLAGS, 3 ; GOTO RH22INSTR5 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH224J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG22, FSW1_RH224_BIT; MOVFF FSW1ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x74 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH224J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH224J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG22, FSW2_RH224_BIT; MOVFF FSW2ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x75 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH224J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH224J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG22, FSW3_RH224_BIT; MOVFF FSW3ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x76 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH224J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH224J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG22, FSW4_RH224_BIT; MOVFF FSW4ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x77 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH224J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH224J41 ; BTFSS RECFLAGS6, REC_RH210_BIT ; BRA RH224J41 ; MOVLW 0x45 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x21 ;EEPROM ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH224J41: ; MOVLW 0x21 ;EEPROM ADDRESS.(NYLON GUITAR OCTAVE). MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN WREG. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH224J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. BSF RECFLAGS6, REC_RH210_BIT ; MOVFF EEDATA, SNDTRI ; RH224J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH224J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x08 ;4th BUTTON MASK. ANDWF RH22ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH21ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH22ONOFF_FLAGS, 3 ; BTFSS RH22ONOFF_FLAGS, 3 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH22ONOFF_FLAGS, 3 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH2. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH224LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH224J5 ; RH224LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH224J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL RH2SOUND10 ; ; BSF GENFLAGS3, RH224OCTD_BIT;Working an octave down flag. BCF GENFLAGS1, RH2OCTBIT ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH22INSTR5: ; BTFSS RH22_ON_FLAGS, 4 ; GOTO RH22INSTR6 ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH225J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG22, FSW1_RH225_BIT; MOVFF FSW1ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x74 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH225J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH225J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG22, FSW2_RH225_BIT; MOVFF FSW2ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x75 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH225J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH225J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG22, FSW3_RH225_BIT; MOVFF FSW3ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x76 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH225J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH225J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG22, FSW4_RH225_BIT; MOVFF FSW4ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x77 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ; RH225J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH225J41 ; BTFSS RECFLAGS6, REC_RH211_BIT ; BRA RH225J41 ; MOVLW 0x46 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x22 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH225J41: ; MOVLW 0x22 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH225J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. BSF RECFLAGS6, REC_RH211_BIT ; MOVFF EEDATA, SNDTRI ; RH225J42: ; BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH225J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x10 ;5th BUTTON MASK. ANDWF RH22ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH21ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH22ONOFF_FLAGS, 4 ; BTFSS RH22ONOFF_FLAGS, 4 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH22ONOFF_FLAGS, 4 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH2. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH225LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH225J5 ; RH225LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH225J5: ;................................... MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET BASS PROG SENT FLAG. ; CALL RH2SOUND11 ; ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH22INSTR6: ; BTFSS RH22_ON_FLAGS, 5 ; GOTO RH22INSOCT ;Goto next button > ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH226J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG22, FSW1_RH226_BIT; MOVFF FSW1ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x74 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH226J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH226J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG22, FSW2_RH226_BIT; MOVFF FSW2ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x75 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH226J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH226J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG22, FSW3_RH226_BIT; MOVFF FSW3ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x76 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH226J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH226J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG22, FSW4_RH226_BIT; MOVFF FSW4ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x77 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; ;................................................... RH226J4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH226J41 ; BTFSS RECFLAGS6, REC_RH212_BIT ; BRA RH226J41 ; MOVLW 0x47 ;EEPROM REVERB LEVEL ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF RH2FXPOT, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; MOVLW 0x23 ;EEPROM CHORD1 ADDRESS. MOVWF EEADR ;DATA MEMORY TO WRITE TO. MOVF SNDTRI, W ; MOVWF EEDATA ;VALUE TO WRITE. CALL EEPROM_WRITE ; ; RH226J41: ; MOVLW 0x23 ;EEPROM ADDRESS. MOVWF EEADR ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BCF EECON1, CFGS ; BSF EECON1, RD ;ENABLE EEPROM READ. ;VALUE IN EEDATA. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA RH226J42 ; CLRF RECFLAGS1 ;BASS REC FLAGS. CLRF RECFLAGS2 ;CHORD REC FLAGS. CLRF RECFLAGS3 ;RH1 REC FLAGS. CLRF RECFLAGS4 ;RH1 REC FLAGS. CLRF RECFLAGS5 ;RH2 REC FLAGS. CLRF RECFLAGS6 ;RH2 REC FLAGS. CLRF RECFLAGS7 ;BASS BANK B REC FLAGS. CLRF RECFLAGS8 ;CHORDS BANK B REC FLAGS. BSF RECFLAGS6, REC_RH212_BIT ;This would be USED 2nd time through. MOVFF EEDATA, SNDTRI ; RH226J42: ;.......................................................... BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND-TRY-OUT MODE FLAG. BRA RH226J5 ;IN SOUND-TRY-OUT MODE CONTINUE AS NORMAL. MOVLW 0x20 ;6th BUTTON MASK. ANDWF RH22ONOFF_FLAGS, F ;CLEAR OTHER RH2 INSTRUMENTS. CLRF RH21ONOFF_FLAGS ;CLEAR OTHER RH2 INSTRUMENTS. BTG RH22ONOFF_FLAGS, 5 ; BTFSS RH22ONOFF_FLAGS, 5 ; BSF GENFLAGS1, MUTE2_FLAG ; BTFSC RH22ONOFF_FLAGS, 5 ; BCF GENFLAGS1, MUTE2_FLAG ; ;MUTE RH2. BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH226LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BRA RH226J5 ; RH226LEDON: ;.......................................................... BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON . RH226J5: ; MOVFF EEDATA, PROGCHHOLD2 ; BTFSS PROGCHHOLD2, 7 ;IF >0x7F IT IS A BLANK SOUND. BCF GENFLAGS4, BLANK_RH2_FLAG ; BTFSC PROGCHHOLD2, 7 ; BSF GENFLAGS4, BLANK_RH2_FLAG ;RH2 MUTE (BLANK SOUND). MOVLW 0xC3 ;PROG CHANGE CHAN 4. MOVWF PROGCHHOLD1 ; BSF SCANSTAT, 0 ;SET PROG SENT FLAG. ; CALL RH2SOUND12 ;Send parameters for the sound. ; GOTO SCANEND ; ;........................................................................................................................................................................................ RH22INSOCT: ; BTFSS RH22_ON_FLAGS, 6 ; BRA RH228 ;MUTE RH2 BUTTON. ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ RH22RES1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG, FSW1_MRH2_BIT ; MOVFF FSW1ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x78 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH22RES1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ RH22RES2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG, FSW2_MRH2_BIT ; MOVFF FSW2ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x79 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH22RES2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ RH22RES3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG, FSW3_MRH2_BIT; MOVFF FSW3ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH22RES3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ RH22RES4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG, FSW4_MRH2_BIT; MOVFF FSW4ASIGNREG, EEDATA ;VALUE TO WRITE. MOVLW 0x7B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; RH22RES4: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE - MUTE2 BUTTON IS BRA RH227J1 ; INCREMENT THROUGH SOUND TABLE BUTTON. BSF GENFLAGS10, STM_MUTINC_FLAG; BRA RH2END ; RH227J1: ;........................ BCF GENFLAGS6, RHINSTCHNG ;STOP RH CHANGE ALERT. BTFSS GENFLAGS3, MUTOG_FLAG ;SWOPS MUTE RH1 <-> RH2. BRA RH22NOMUTOG ; BTG GENFLAGS1, MUTE2_FLAG ; BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH22MUTOGLEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;RH2 ON LED, OFF. BSF DISPLAYREG, MUTE1LED ;RH1 ON LED, ON. BCF GENFLAGS1, MUTE1_FLAG ; BTFSC MIDISTAT2, CH5COND_FLAG ;Ch5 ON IF PREVIOUSLY ON. BSF GENFLAGS2, CH5ON_FLAG ; GOTO SCANEND ; RH22MUTOGLEDON: ; BSF GENFLAGS1, MUTE1_FLAG ; MOVLW 0xB0 ;ALL SOUND OFF CHAN 1. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE1LED ;RH1 ON LED, OFF. BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON. BCF GENFLAGS2, CH5ON_FLAG ;Ch5 OFF. GOTO SCANEND ; RH22NOMUTOG: ;................................................... BTG GENFLAGS1, MUTE2_FLAG ; BTFSS GENFLAGS1, MUTE2_FLAG ; BRA RH22LEDON ; MOVLW 0xB3 ;ALL SOUND OFF CHAN 4. MOVWF CONTCHAN ; MOVLW 0x78 ; MOVWF CONTDB1 ; CLRF CONTDB2 ; BSF GENFLAGS1, MUTE_FLAG ;SENDS ALL SOUND OFF. BCF DISPLAYREG, MUTE2LED ;'RH2 ON' LED IS NOW OFF. ; CLRF RH22ONOFF_FLAGS ; CLRF RH21ONOFF_FLAGS ; GOTO SCANEND ; RH22LEDON: ; BSF DISPLAYREG, MUTE2LED ;RH2 ON LED, ON. RH2END: ; GOTO SCANEND ; ;........................................................................................................................................ RH228: ;MANUAL DRUMS1 ON/OFF BUTTON. BTFSS RH22_ON_FLAGS, 7 ; BRA FSWS ; ; MOVF PORTC, W ; MOVWF PEDTEMP ; ANDLW 0x02 ;ASSIGN FSW1. BZ PERC1J1 ; CALL FSW1ASIGNCLEAR ; BSF FSW1ASIGNREG22, FSW1_RH227_BIT; MOVFF FSW1ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x74 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; PERC1J1: ; MOVF PEDTEMP, W ; ANDLW 0x01 ;ASSIGN FSW2. BZ PERC1J2 ; CALL FSW2ASIGNCLEAR ; BSF FSW2ASIGNREG22, FSW2_RH227_BIT; MOVFF FSW2ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x75 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; PERC1J2: ; MOVF PEDTEMP, W ; ANDLW 0x04 ;ASSIGN FSW3. BZ PERC1J3 ; CALL FSW3ASIGNCLEAR ; BSF FSW3ASIGNREG22, FSW3_RH227_BIT; MOVFF FSW3ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x76 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; PERC1J3: ; MOVF PORTA, W ; ANDLW 0x10 ;ASSIGN FSW4. BZ PERC1J4 ; CALL FSW4ASIGNCLEAR ; BSF FSW4ASIGNREG22, FSW4_RH227_BIT; MOVFF FSW4ASIGNREG22, EEDATA ;VALUE TO WRITE. MOVLW 0x77 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; GOTO SCANEND ; PERC1J4: ;................................................................... BCF GENFLAGS6, RHINSTCHNG ;STOP RH CHANGE ALERT. BTG GENFLAGS3, DRM1_BIT ;TOGGLE DRUM1 PERCUSSION ON/OFF BIT. BCF GENFLAGS8, DRM2_BIT ; BCF GENFLAGS8, DRM3_BIT ; GOTO SCANEND ; ;............................................................................................................................................................................. FSWS: ;FOOTSWITCH INPUT & ASSIGNMENT. MOVF PORTC, W ; ANDLW 0x07 ;1st 3 BITS OF PORTC. MOVWF PEDTEMP ; BTFSC PORTA, 4 ; BSF PEDTEMP, 3 ; BTFSS PORTA, 4 ; BCF PEDTEMP, 3 ; ; MOVF PEDTEMP, W ; XORWF FSWINHOLD, W ;RESULT IN W. MOVFF PEDTEMP, FSWINHOLD ; BZ FSW_STG1 ;NO CHANGE IN SCAN. ANDWF PEDTEMP, W ;CHANGE TO ON NOW IN W. BZ FSW_STG1 ;NO CHANGE IN SCAN. ; BSF GENFLAGS10, DIP_CHNG_LED ;Dip control change led. BTFSC WREG, 1 ;FSW1 BRA FSW1_SEL ; BTFSC WREG, 0 ;FSW2 GOTO FSW2_SEL ; BTFSC WREG, 2 ;FSW3 GOTO FSW3_SEL ; BTFSC WREG, 3 ;FSW4 GOTO FSW4_SEL ; FSW_STG1: ;................................................................. BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE. BRA FSW_STG1A ; ; BTFSS GENFLAGS10, STM_MUTINC_FLAG; BRA FSW_STG2 ; BCF GENFLAGS10, STM_MUTINC_FLAG; BRA FSW1_SEL ; ; FSW_STG2: ; BTFSS GENFLAGS10, STM_MUTDEC_FLAG; BRA FSW_STG1A ; BCF GENFLAGS10, STM_MUTDEC_FLAG; BRA FSW2_SEL ; ; FSW_STG1A: ; GOTO FSWS_END ; ;........................................................................ FSW1_SEL: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE. BRA FSW1_SELCONT ;> INCF SNDTRI ; MOVLW 0x80 ;128 = PROGRAM IS A BLANK. CPFSEQ SNDTRI ; BRA FSW1_TOJ1 ; BRA FSW1_TOJ2 ; FSW1_TOJ1: ; MOVLW 0x81 ; CPFSEQ SNDTRI ; BRA FSW1_TOJ2 ; CLRF SNDTRI ; FSW1_TOJ2: ; BSF SCANSTAT, 0 ;SET PROG SEND FLAG. MOVFF SNDTRI, PROGCHHOLD2 ; ; BCF GENFLAGS4, BLANK_RH1_FLAG ;PROGRAM A BLANK FLAG RH1. BCF GENFLAGS4, CHDVEL0_FLAG ; BCF GENFLAGS4, BLANK_RH2_FLAG ; BCF GENFLAGS4, BASVEL0_FLAG ; ; BTFSS SNDTRI, 7 ; BRA FSW1_TOJ6 ; ; MOVLW 0xC0 ; CPFSEQ PROGCHHOLD1 ;PROG CHANGE CHANNEL. BRA FSW1_TOJ3 ; BSF GENFLAGS4, BLANK_RH1_FLAG ;PROGRAM A BLANK FLAG RH1. FSW1_TOJ3: ; MOVLW 0xC1 ;CHORDS. CPFSEQ PROGCHHOLD1 ;PROG CHANGE CHANNEL. BRA FSW1_TOJ4 ; BSF GENFLAGS4, CHDVEL0_FLAG ; FSW1_TOJ4: ; MOVLW 0xC2 ;BASS. CPFSEQ PROGCHHOLD1 ;PROG CHANGE CHANNEL. BRA FSW1_TOJ5 ; BSF GENFLAGS4, BASVEL0_FLAG ; FSW1_TOJ5: ; MOVLW 0xC3 ;RH2 - CH4. CPFSEQ PROGCHHOLD1 ;PROG CHANGE CHANNEL. BRA FSW1_TOJ6 ; BSF GENFLAGS4, BLANK_RH2_FLAG ; FSW1_TOJ6: ; GOTO SCANEND ; ; FSW1_SELCONT: ;.................... MOVF FSW1ASIGNREG, W ; BZ FSW1_SELCONT2 ; ; BTFSC FSW1ASIGNREG, FSW1_MRH2_BIT; GOTO RH22RES4 ; BTFSC FSW1ASIGNREG, FSW1_ORH2_BIT; GOTO RH21RES4 ; BTFSC FSW1ASIGNREG, FSW1_MRH1_BIT; GOTO RH12RES4 ; BTFSC FSW1ASIGNREG, FSW1_ORH1_BIT; GOTO RH11RES4 ; BTFSC FSW1ASIGNREG, FSW1_OCHD_BIT; GOTO CHD2RES4 ; BTFSC FSW1ASIGNREG, FSW1_OBAS_BIT; GOTO BAS2RES4 ; FSW1_SELCONT2: ; MOVF FSW1ASIGNREGBA, W ; BZ FSW1_SELCONT3 ; ; BTFSC FSW1ASIGNREGBA, FSW1_BAS1_BIT; GOTO BAS1J4 ; BTFSC FSW1ASIGNREGBA, FSW1_BAS2_BIT; GOTO BAS2J4 ; BTFSC FSW1ASIGNREGBA, FSW1_BAS3_BIT; GOTO BAS3J4 ; BTFSC FSW1ASIGNREGBA, FSW1_BAS4_BIT; GOTO BAS4J4 ; BTFSC FSW1ASIGNREGBA, FSW1_BAS5_BIT; GOTO BAS5J4 ; BTFSC FSW1ASIGNREGBA, FSW1_BAS6_BIT; GOTO BAS6J4 ; BTFSC FSW1ASIGNREGBA, FSW1_BAS8_BIT; GOTO BAS8J4 ; FSW1_SELCONT3: ; MOVF FSW1ASIGNREGCH, W ; BZ FSW1_SELCONT4 ; ; BTFSC FSW1ASIGNREGCH, FSW1_CHD1_BIT; GOTO CHD1J4 ; BTFSC FSW1ASIGNREGCH, FSW1_CHD2_BIT; GOTO CHD2J4 ; BTFSC FSW1ASIGNREGCH, FSW1_CHD3_BIT; GOTO CHD3J4 ; BTFSC FSW1ASIGNREGCH, FSW1_CHD4_BIT; GOTO CHD4J4 ; BTFSC FSW1ASIGNREGCH, FSW1_CHD5_BIT; GOTO CHD5J4 ; BTFSC FSW1ASIGNREGCH, FSW1_CHD6_BIT; GOTO CHD6J4 ; BTFSC FSW1ASIGNREGCH, FSW1_CHD8_BIT; GOTO CHD8J4 ; FSW1_SELCONT4: ; MOVF FSW1ASIGNREG11, W ; BZ FSW1_SELCONT5 ; ; BTFSC FSW1ASIGNREG11, FSW1_RH111_BIT; GOTO RH111J4 ; BTFSC FSW1ASIGNREG11, FSW1_RH112_BIT; GOTO RH112J4 ; BTFSC FSW1ASIGNREG11, FSW1_RH113_BIT; GOTO RH113J4 ; BTFSC FSW1ASIGNREG11, FSW1_RH114_BIT; GOTO RH114J4 ; BTFSC FSW1ASIGNREG11, FSW1_RH115_BIT; GOTO RH115J4 ; BTFSC FSW1ASIGNREG11, FSW1_RH116_BIT; GOTO RH116J4 ; BTFSC FSW1ASIGNREG11, FSW1_RH118_BIT; GOTO RH118J4 ; FSW1_SELCONT5: ; MOVF FSW1ASIGNREG12, W ; BZ FSW1_SELCONT6 ; ; BTFSC FSW1ASIGNREG12, FSW1_RH121_BIT; GOTO RH121J4 ; BTFSC FSW1ASIGNREG12, FSW1_RH122_BIT; GOTO RH122J4 ; BTFSC FSW1ASIGNREG12, FSW1_RH123_BIT; GOTO RH123J4 ; BTFSC FSW1ASIGNREG12, FSW1_RH124_BIT; GOTO RH124J4 ; BTFSC FSW1ASIGNREG12, FSW1_RH125_BIT; GOTO RH125J4 ; BTFSC FSW1ASIGNREG12, FSW1_RH126_BIT; GOTO RH126J4 ; BTFSC FSW1ASIGNREG12, FSW1_RH128_BIT; GOTO RH128J4 ; FSW1_SELCONT6: ; MOVF FSW1ASIGNREG21, W ; BZ FSW1_SELCONT7 ; ; BTFSC FSW1ASIGNREG21, FSW1_RH211_BIT; GOTO RH211J4 ; BTFSC FSW1ASIGNREG21, FSW1_RH212_BIT; GOTO RH212J4 ; BTFSC FSW1ASIGNREG21, FSW1_RH213_BIT; GOTO RH213J4 ; BTFSC FSW1ASIGNREG21, FSW1_RH214_BIT; GOTO RH214J4 ; BTFSC FSW1ASIGNREG21, FSW1_RH215_BIT; GOTO RH215J4 ; BTFSC FSW1ASIGNREG21, FSW1_RH216_BIT; GOTO RH216J4 ; BTFSC FSW1ASIGNREG21, FSW1_RH218_BIT; GOTO RH218J4 ; FSW1_SELCONT7: ; MOVF FSW1ASIGNREG22, W ; BZ FSW1_SELCONT8 ; ; BTFSC FSW1ASIGNREG22, FSW1_RH221_BIT; GOTO RH221J4 ; BTFSC FSW1ASIGNREG22, FSW1_RH222_BIT; GOTO RH222J4 ; BTFSC FSW1ASIGNREG22, FSW1_RH223_BIT; GOTO RH223J4 ; BTFSC FSW1ASIGNREG22, FSW1_RH224_BIT; GOTO RH224J4 ; BTFSC FSW1ASIGNREG22, FSW1_RH225_BIT; GOTO RH225J4 ; BTFSC FSW1ASIGNREG22, FSW1_RH226_BIT; GOTO RH226J4 ; BTFSC FSW1ASIGNREG22, FSW1_RH227_BIT; GOTO PERC1J4 ; FSW1_SELCONT8: ; GOTO SCANEND ;> ;.................................... FSW2_SEL: ; BTFSS MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE. BRA FSW2_SELCONT ; DECF SNDTRI ; MOVLW 0xFF ; CPFSEQ SNDTRI ; BRA FSW2_TOJ1 ; MOVLW 0x80 ;128 = PROGRAM A BLANK. MOVWF SNDTRI ; FSW2_TOJ1: ; BSF SCANSTAT, 0 ;SET PROG SEND FLAG. MOVFF SNDTRI, PROGCHHOLD2 ; ;SEE WHICH CHANNEL IS ACTIVE. BCF GENFLAGS4, BLANK_RH1_FLAG;PROGRAM A BLANK FLAG RH1. BCF GENFLAGS4, CHDVEL0_FLAG ; BCF GENFLAGS4, BLANK_RH2_FLAG; BCF GENFLAGS4, BASVEL0_FLAG ; ; BTFSS SNDTRI, 7 ; BRA FSW2_TOJ6 ; ; MOVLW 0xC0 ; CPFSEQ PROGCHHOLD1 ;PROG CHANGE CHANNEL. BRA FSW2_TOJ3 ; BSF GENFLAGS4, BLANK_RH1_FLAG;PROGRAM A BLANK FLAG RH1. FSW2_TOJ3: ; MOVLW 0xC1 ;CHORDS. CPFSEQ PROGCHHOLD1 ;PROG CHANGE CHANNEL. BRA FSW2_TOJ4 ; BSF GENFLAGS4, CHDVEL0_FLAG ; FSW2_TOJ4: ; MOVLW 0xC2 ;BASS. CPFSEQ PROGCHHOLD1 ;PROG CHANGE CHANNEL. BRA FSW2_TOJ5 ; BSF GENFLAGS4, BASVEL0_FLAG ; FSW2_TOJ5: ; MOVLW 0xC3 ;CH4 - RH2. CPFSEQ PROGCHHOLD1 ;PROG CHANGE CHANNEL. BRA FSW2_TOJ6 ; BSF GENFLAGS4, BLANK_RH2_FLAG; FSW2_TOJ6: ; BRA SCANEND ;> ; FSW2_SELCONT: ;................... MOVF FSW2ASIGNREG, W ; BZ FSW2_SELCONT2 ; ; BTFSC FSW2ASIGNREG, FSW2_MRH2_BIT; GOTO RH22RES4 ; BTFSC FSW2ASIGNREG, FSW2_ORH2_BIT; GOTO RH21RES4 ; BTFSC FSW2ASIGNREG, FSW2_MRH1_BIT; GOTO RH12RES4 ; BTFSC FSW2ASIGNREG, FSW2_ORH1_BIT; GOTO RH11RES4 ; BTFSC FSW2ASIGNREG, FSW2_OCHD_BIT; GOTO CHD2RES4 ; BTFSC FSW2ASIGNREG, FSW2_OBAS_BIT; GOTO BAS2RES4 ; FSW2_SELCONT2: ; MOVF FSW2ASIGNREGBA, W ; BZ FSW2_SELCONT3 ; ; BTFSC FSW2ASIGNREGBA, FSW2_BAS1_BIT; GOTO BAS1J4 ; BTFSC FSW2ASIGNREGBA, FSW2_BAS2_BIT; GOTO BAS2J4 ; BTFSC FSW2ASIGNREGBA, FSW2_BAS3_BIT; GOTO BAS3J4 ; BTFSC FSW2ASIGNREGBA, FSW2_BAS4_BIT; GOTO BAS4J4 ; BTFSC FSW2ASIGNREGBA, FSW2_BAS5_BIT; GOTO BAS5J4 ; BTFSC FSW2ASIGNREGBA, FSW2_BAS6_BIT; GOTO BAS6J4 ; BTFSC FSW2ASIGNREGBA, FSW2_BAS8_BIT; GOTO BAS8J4 ; FSW2_SELCONT3: ; MOVF FSW2ASIGNREGCH, W ; BZ FSW2_SELCONT4 ; ; BTFSC FSW2ASIGNREGCH, FSW2_CHD1_BIT; GOTO CHD1J4 ; BTFSC FSW2ASIGNREGCH, FSW2_CHD2_BIT; GOTO CHD2J4 ; BTFSC FSW2ASIGNREGCH, FSW2_CHD3_BIT; GOTO CHD3J4 ; BTFSC FSW2ASIGNREGCH, FSW2_CHD4_BIT; GOTO CHD4J4 ; BTFSC FSW2ASIGNREGCH, FSW2_CHD5_BIT; GOTO CHD5J4 ; BTFSC FSW2ASIGNREGCH, FSW2_CHD6_BIT; GOTO CHD6J4 ; BTFSC FSW2ASIGNREGCH, FSW2_CHD8_BIT; GOTO CHD8J4 ; FSW2_SELCONT4: ; MOVF FSW2ASIGNREG11, W ; BZ FSW2_SELCONT5 ; ; BTFSC FSW2ASIGNREG11, FSW2_RH111_BIT; GOTO RH111J4 ; BTFSC FSW2ASIGNREG11, FSW2_RH112_BIT; GOTO RH112J4 ; BTFSC FSW2ASIGNREG11, FSW2_RH113_BIT; GOTO RH113J4 ; BTFSC FSW2ASIGNREG11, FSW2_RH114_BIT; GOTO RH114J4 ; BTFSC FSW2ASIGNREG11, FSW2_RH115_BIT; GOTO RH115J4 ; BTFSC FSW2ASIGNREG11, FSW2_RH116_BIT; GOTO RH116J4 ; BTFSC FSW2ASIGNREG11, FSW2_RH118_BIT; GOTO RH118J4 ; FSW2_SELCONT5: ; MOVF FSW2ASIGNREG12, W ; BZ FSW2_SELCONT6 ; ; BTFSC FSW2ASIGNREG12, FSW2_RH121_BIT; GOTO RH121J4 ; BTFSC FSW2ASIGNREG12, FSW2_RH122_BIT; GOTO RH122J4 ; BTFSC FSW2ASIGNREG12, FSW2_RH123_BIT; GOTO RH123J4 ; BTFSC FSW2ASIGNREG12, FSW2_RH124_BIT; GOTO RH124J4 ; BTFSC FSW2ASIGNREG12, FSW2_RH125_BIT; GOTO RH125J4 ; BTFSC FSW2ASIGNREG12, FSW2_RH126_BIT; GOTO RH126J4 ; BTFSC FSW2ASIGNREG12, FSW2_RH128_BIT; GOTO RH128J4 ; FSW2_SELCONT6: ; MOVF FSW2ASIGNREG21, W ; BZ FSW2_SELCONT7 ; ; BTFSC FSW2ASIGNREG21, FSW2_RH211_BIT; GOTO RH211J4 ; BTFSC FSW2ASIGNREG21, FSW2_RH212_BIT; GOTO RH212J4 ; BTFSC FSW2ASIGNREG21, FSW2_RH213_BIT; GOTO RH213J4 ; BTFSC FSW2ASIGNREG21, FSW2_RH214_BIT; GOTO RH214J4 ; BTFSC FSW2ASIGNREG21, FSW2_RH215_BIT; GOTO RH215J4 ; BTFSC FSW2ASIGNREG21, FSW2_RH216_BIT; GOTO RH216J4 ; BTFSC FSW2ASIGNREG21, FSW2_RH218_BIT; GOTO RH218J4 FSW2_SELCONT7: ; MOVF FSW2ASIGNREG22, W ; BZ FSW2_SELCONT8 ; ; BTFSC FSW2ASIGNREG22, FSW2_RH221_BIT; GOTO RH221J4 ; BTFSC FSW2ASIGNREG22, FSW2_RH222_BIT; GOTO RH222J4 ; BTFSC FSW2ASIGNREG22, FSW2_RH223_BIT; GOTO RH223J4 ; BTFSC FSW2ASIGNREG22, FSW2_RH224_BIT; GOTO RH224J4 ; BTFSC FSW2ASIGNREG22, FSW2_RH225_BIT; GOTO RH225J4 ; BTFSC FSW2ASIGNREG22, FSW2_RH226_BIT; GOTO RH226J4 ; BTFSC FSW2ASIGNREG22, FSW2_RH227_BIT; GOTO PERC1J4 ; FSW2_SELCONT8: ; GOTO SCANEND ; ;.................................... FSW3_SEL: ; MOVF FSW3ASIGNREG, W ; BZ FSW3_SELCONT2 ; ; BTFSC FSW3ASIGNREG, FSW3_MRH2_BIT; GOTO RH22RES4 ; BTFSC FSW3ASIGNREG, FSW3_ORH2_BIT; GOTO RH21RES4 ; BTFSC FSW3ASIGNREG, FSW3_MRH1_BIT; GOTO RH12RES4 ; BTFSC FSW3ASIGNREG, FSW3_ORH1_BIT; GOTO RH11RES4 ; BTFSC FSW3ASIGNREG, FSW3_OCHD_BIT; GOTO CHD2RES4 ; BTFSC FSW3ASIGNREG, FSW3_OBAS_BIT; GOTO BAS2RES4 ; FSW3_SELCONT2: ; MOVF FSW3ASIGNREGBA, W ; BZ FSW3_SELCONT3 ; ; BTFSC FSW3ASIGNREGBA, FSW3_BAS1_BIT; GOTO BAS1J4 ; BTFSC FSW3ASIGNREGBA, FSW3_BAS2_BIT; GOTO BAS2J4 ; BTFSC FSW3ASIGNREGBA, FSW3_BAS3_BIT; GOTO BAS3J4 ; BTFSC FSW3ASIGNREGBA, FSW3_BAS4_BIT; GOTO BAS4J4 ; BTFSC FSW3ASIGNREGBA, FSW3_BAS5_BIT; GOTO BAS5J4 ; BTFSC FSW3ASIGNREGBA, FSW3_BAS6_BIT; GOTO BAS6J4 ; BTFSC FSW3ASIGNREGBA, FSW3_BAS8_BIT; GOTO BAS8J4 ; FSW3_SELCONT3: ; MOVF FSW3ASIGNREGCH, W ; BZ FSW3_SELCONT4 ; ; BTFSC FSW3ASIGNREGCH, FSW3_CHD1_BIT; GOTO CHD1J4 ; BTFSC FSW3ASIGNREGCH, FSW3_CHD2_BIT; GOTO CHD2J4 ; BTFSC FSW3ASIGNREGCH, FSW3_CHD3_BIT; GOTO CHD3J4 ; BTFSC FSW3ASIGNREGCH, FSW3_CHD4_BIT; GOTO CHD4J4 ; BTFSC FSW3ASIGNREGCH, FSW3_CHD5_BIT; GOTO CHD5J4 ; BTFSC FSW3ASIGNREGCH, FSW3_CHD6_BIT; GOTO CHD6J4 ; BTFSC FSW3ASIGNREGCH, FSW3_CHD8_BIT; GOTO CHD8J4 ; FSW3_SELCONT4: ; MOVF FSW3ASIGNREG11, W ; BZ FSW3_SELCONT5 ; ; BTFSC FSW3ASIGNREG11, FSW3_RH111_BIT; GOTO RH111J4 ; BTFSC FSW3ASIGNREG11, FSW3_RH112_BIT; GOTO RH112J4 ; BTFSC FSW3ASIGNREG11, FSW3_RH113_BIT; GOTO RH113J4 ; BTFSC FSW3ASIGNREG11, FSW3_RH114_BIT; GOTO RH114J4 ; BTFSC FSW3ASIGNREG11, FSW3_RH115_BIT; GOTO RH115J4 ; BTFSC FSW3ASIGNREG11, FSW3_RH116_BIT; GOTO RH116J4 ; BTFSC FSW3ASIGNREG11, FSW3_RH118_BIT; GOTO RH118J4 ; FSW3_SELCONT5: ; MOVF FSW3ASIGNREG12, W ; BZ FSW3_SELCONT6 ; ; BTFSC FSW3ASIGNREG12, FSW3_RH121_BIT; GOTO RH121J4 ; BTFSC FSW3ASIGNREG12, FSW3_RH122_BIT; GOTO RH122J4 ; BTFSC FSW3ASIGNREG12, FSW3_RH123_BIT; GOTO RH123J4 ; BTFSC FSW3ASIGNREG12, FSW3_RH124_BIT; GOTO RH124J4 ; BTFSC FSW3ASIGNREG12, FSW3_RH125_BIT; GOTO RH125J4 ; BTFSC FSW3ASIGNREG12, FSW3_RH126_BIT; GOTO RH126J4 ; BTFSC FSW3ASIGNREG12, FSW3_RH128_BIT; GOTO RH128J4 ; FSW3_SELCONT6: ; MOVF FSW3ASIGNREG21, W ; BZ FSW3_SELCONT7 ; ; BTFSC FSW3ASIGNREG21, FSW3_RH211_BIT; GOTO RH211J4 ; BTFSC FSW3ASIGNREG21, FSW3_RH212_BIT; GOTO RH212J4 ; BTFSC FSW3ASIGNREG21, FSW3_RH213_BIT; GOTO RH213J4 ; BTFSC FSW3ASIGNREG21, FSW3_RH214_BIT; GOTO RH214J4 ; BTFSC FSW3ASIGNREG21, FSW3_RH215_BIT; GOTO RH215J4 ; BTFSC FSW3ASIGNREG21, FSW3_RH216_BIT; GOTO RH216J4 ; BTFSC FSW3ASIGNREG21, FSW3_RH218_BIT; GOTO RH218J4 FSW3_SELCONT7: ; MOVF FSW3ASIGNREG22, W ; BZ FSW3_SELCONT8 ; ; BTFSC FSW3ASIGNREG22, FSW3_RH221_BIT; GOTO RH221J4 ; BTFSC FSW3ASIGNREG22, FSW3_RH222_BIT; GOTO RH222J4 ; BTFSC FSW3ASIGNREG22, FSW3_RH223_BIT; GOTO RH223J4 ; BTFSC FSW3ASIGNREG22, FSW3_RH224_BIT; GOTO RH224J4 ; BTFSC FSW3ASIGNREG22, FSW3_RH225_BIT; GOTO RH225J4 ; BTFSC FSW3ASIGNREG22, FSW3_RH226_BIT; GOTO RH226J4 ; BTFSC FSW3ASIGNREG22, FSW3_RH227_BIT; GOTO PERC1J4 ; FSW3_SELCONT8: ; GOTO SCANEND ; ;.................................... FSW4_SEL: ; MOVF FSW4ASIGNREG, W ; BZ FSW4_SELCONT2 ; ; BTFSC FSW4ASIGNREG, FSW4_MRH2_BIT; GOTO RH22RES4 ; BTFSC FSW4ASIGNREG, FSW4_ORH2_BIT; GOTO RH21RES4 ; BTFSC FSW4ASIGNREG, FSW4_MRH1_BIT; GOTO RH12RES4 ; BTFSC FSW4ASIGNREG, FSW4_ORH1_BIT; GOTO RH11RES4 ; BTFSC FSW4ASIGNREG, FSW4_OCHD_BIT; GOTO CHD2RES4 ; BTFSC FSW4ASIGNREG, FSW4_OBAS_BIT; GOTO BAS2RES4 ; FSW4_SELCONT2: ; MOVF FSW4ASIGNREGBA, W ; BZ FSW4_SELCONT3 ; ; BTFSC FSW4ASIGNREGBA, FSW4_BAS1_BIT; GOTO BAS1J4 ; BTFSC FSW4ASIGNREGBA, FSW4_BAS2_BIT; GOTO BAS2J4 ; BTFSC FSW4ASIGNREGBA, FSW4_BAS3_BIT; GOTO BAS3J4 ; BTFSC FSW4ASIGNREGBA, FSW4_BAS4_BIT; GOTO BAS4J4 ; BTFSC FSW4ASIGNREGBA, FSW4_BAS5_BIT; GOTO BAS5J4 ; BTFSC FSW4ASIGNREGBA, FSW4_BAS6_BIT; GOTO BAS6J4 ; BTFSC FSW4ASIGNREGBA, FSW4_BAS8_BIT; GOTO BAS8J4 ; FSW4_SELCONT3: ; MOVF FSW4ASIGNREGCH, W ; BZ FSW4_SELCONT4 ; ; BTFSC FSW4ASIGNREGCH, FSW4_CHD1_BIT; GOTO CHD1J4 ; BTFSC FSW4ASIGNREGCH, FSW4_CHD2_BIT; GOTO CHD2J4 ; BTFSC FSW4ASIGNREGCH, FSW4_CHD3_BIT; GOTO CHD3J4 ; BTFSC FSW4ASIGNREGCH, FSW4_CHD4_BIT; GOTO CHD4J4 ; BTFSC FSW4ASIGNREGCH, FSW4_CHD5_BIT; GOTO CHD5J4 ; BTFSC FSW4ASIGNREGCH, FSW4_CHD6_BIT; GOTO CHD6J4 ; BTFSC FSW4ASIGNREGCH, FSW4_CHD8_BIT; GOTO CHD8J4 ; FSW4_SELCONT4: ; MOVF FSW4ASIGNREG11, W ; BZ FSW4_SELCONT5 ; ; BTFSC FSW4ASIGNREG11, FSW4_RH111_BIT; GOTO RH111J4 ; BTFSC FSW4ASIGNREG11, FSW4_RH112_BIT; GOTO RH112J4 ; BTFSC FSW4ASIGNREG11, FSW4_RH113_BIT; GOTO RH113J4 ; BTFSC FSW4ASIGNREG11, FSW4_RH114_BIT; GOTO RH114J4 ; BTFSC FSW4ASIGNREG11, FSW4_RH115_BIT; GOTO RH115J4 ; BTFSC FSW4ASIGNREG11, FSW4_RH116_BIT; GOTO RH116J4 ; BTFSC FSW4ASIGNREG11, FSW4_RH118_BIT; GOTO RH118J4 ; ; FSW4_SELCONT5: ; MOVF FSW4ASIGNREG12, W ; BZ FSW4_SELCONT6 ; ; BTFSC FSW4ASIGNREG12, FSW4_RH121_BIT; GOTO RH121J4 ; BTFSC FSW4ASIGNREG12, FSW4_RH122_BIT; GOTO RH122J4 ; BTFSC FSW4ASIGNREG12, FSW4_RH123_BIT; GOTO RH123J4 ; BTFSC FSW4ASIGNREG12, FSW4_RH124_BIT; GOTO RH124J4 ; BTFSC FSW4ASIGNREG12, FSW4_RH125_BIT; GOTO RH125J4 ; BTFSC FSW4ASIGNREG12, FSW4_RH126_BIT; GOTO RH126J4 ; BTFSC FSW4ASIGNREG12, FSW4_RH128_BIT; GOTO RH128J4 ; FSW4_SELCONT6: ; MOVF FSW4ASIGNREG21, W ; BZ FSW4_SELCONT7 ; ; BTFSC FSW4ASIGNREG21, FSW4_RH211_BIT; GOTO RH211J4 ; BTFSC FSW4ASIGNREG21, FSW4_RH212_BIT; GOTO RH212J4 ; BTFSC FSW4ASIGNREG21, FSW4_RH213_BIT; GOTO RH213J4 ; BTFSC FSW4ASIGNREG21, FSW4_RH214_BIT; GOTO RH214J4 ; BTFSC FSW4ASIGNREG21, FSW4_RH215_BIT; GOTO RH215J4 ; BTFSC FSW4ASIGNREG21, FSW4_RH216_BIT; GOTO RH216J4 ; BTFSC FSW4ASIGNREG21, FSW4_RH218_BIT; GOTO RH218J4 ; FSW4_SELCONT7: ; MOVF FSW4ASIGNREG22, W ; BZ FSW4_SELCONT8 ; ; BTFSC FSW4ASIGNREG22, FSW4_RH221_BIT; GOTO RH221J4 ; BTFSC FSW4ASIGNREG22, FSW4_RH222_BIT; GOTO RH222J4 ; BTFSC FSW4ASIGNREG22, FSW4_RH223_BIT; GOTO RH223J4 ; BTFSC FSW4ASIGNREG22, FSW4_RH224_BIT; GOTO RH224J4 ; BTFSC FSW4ASIGNREG22, FSW4_RH225_BIT; GOTO RH225J4 ; BTFSC FSW4ASIGNREG22, FSW4_RH226_BIT; GOTO RH226J4 ; BTFSC FSW4ASIGNREG22, FSW4_RH227_BIT; GOTO PERC1J4 ; FSW4_SELCONT8: ; BRA SCANEND ; ;.................................................................... FSWS_END: ; ;..................................................................................................................................................................... MTUNEBUT: ;MASTER-TUNE BUTTON (MUTE RH2 BUTTON) if held down for >1.5secs. BTFSC MIDISTAT, SNDTRY_FLAG ;SOUND TRY OUT MODE FLAG. BRA MTUNEBUTEND ; MOVLW 0x01 ;RB0, ENABLE RH27 BUSS. MOVWF PORTB ; NOP ; NOP ; MOVF PORTD, W ;TO WREG. CLRF PORTB ; ANDLW 0x40 ;ISOLATE BIT 6 (MUTE2 BUTTON). MOVWF SCANTEMP1 ; ; BTFSS GENFLAGS9, MTTOG_FLAG ; BRA MTINJ1 ; XORWF MTUNESCAN_HOLD, W ;RESULT IN W. MOVFF SCANTEMP1, MTUNESCAN_HOLD ; BZ MTSCANJ1 ; ; BTFSC SCANTEMP1, 6 ;CHANGE TO ON. BRA MTSCANCLR ; BRA MTSCANJ1 ; ;................................................... MTINJ1: ; MOVFF SCANTEMP1, MTUNESCAN_HOLD ; BTFSS WREG, 6 ;IS MUTE2 BUTTON HELD DOWN ? BRA MTSCANWRT ;NO. BTFSC GENFLAGS9, MTWAIT_BIT ;YES. BRA MTSCANJ1 ; BSF GENFLAGS9, MTWAIT_BIT ;FIRST TIME IN FLAG. MOVLW D'125' ;Button ACTIVATE INTERVAL.(x20ms). MOVWF MTUNEDTIME ;START MTUNE DOWN TIMER. BRA MTSCANORM ;> ; MTSCANJ1: ; TSTFSZ MTUNEDTIME ;HAS BUTTON BEEN HELD DOWN ENOUGH. BRA MTSCANORM ;>NO, NOT LONG ENOUGH YET. BSF GENFLAGS9, MTUNED_FLAG ;YES - TURN MTUNE EDIT ON. BSF GENFLAGS9, MTTOG_FLAG ;MT TOGGLE FLAG. BCF GENFLAGS1, MUTE2_FLAG ;ENABLE RH2. ; ; TSTFSZ MTUNFLASH ; BRA MTSCANJ2 ; BTG DISPLAYREG, MUTE2LED ;FLASH MUTE2 LED. MOVLW D'40' ;LED FLASH RATE. MOVWF MTUNFLASH ; MTSCANJ2: ; GOTO SCANEND2 ;EXIT SCAN> ;....................................... MTSCANCLR: ;MTUNE EXIT ROUTINE. MOVF MTUNCTRL_HOLD, W ; MOVWF EEDATA ;VALUE TO WRITE TO EEPROM. MOVLW 0xEF ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; BCF GENFLAGS1, MUTE2_FLAG ;ENABLE RH2. BSF DISPLAYREG, MUTE2LED ;MUTE2 LED ON. MTSCANWRT: ; BCF GENFLAGS9, MTWAIT_BIT ; BCF GENFLAGS9, MTUNED_FLAG ;MTUNE EDIT MODE IS NOW OFF. BCF GENFLAGS9, MTTOG_FLAG ; MTSCANORM: ;.................................... TSTFSZ SCANDEL ;LOCKOUT TIME. GOTO SCANEXIT ; MTUNEBUTEND: ; ;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SCANEND: ; MOVLW D'30' ;LED DIP OFF TIME.(2ms x 30). SCANENDXTRAT: ; MOVWF SCANDEL ; SCANEND2: ; CLRF PORTB ; ;............................................................................................................................................................ BUTTON_CHANGE: ; BTFSS GENFLAGS6, RHINSTCHNG ;HAS A RH BUTTON BEEN PRESSED. BRA BUT_CHNG_END ;> BCF GENFLAGS6, RHINSTCHNG ; ; ;BTFSC RH12_ON_FLAGS, 7 ;DON'T CANCEL TREM IF SOLO BUTTON PRESSED. ;BRA BUT_LEAVE_TREM ; BCF GENFLAGS7, TREMON_BIT ;CANCEL TREMELO. ;SEND TREMELO OFF BSF GENFLAGS6, SYSX11_B7_FLG ; MOVLW 0x21 ;SELECT CHANNEL 1! MOVWF SYSX11BYTE7 ; MOVLW 0x26 ;SELECT TREM DEPTH. MOVWF SYSX11BYTE8 ; MOVLW 0x00 ;MOD DEPTH VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG ; MOVLW 0x25 ;SELECT CHANNEL 5! MOVWF SYSX11BYTE7 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. ; BSF GENFLAGS6, SYSX11_B7_FLG ; MOVLW 0x24 ;SELECT CHANNEL 4 ! MOVWF SYSX11BYTE7 ; CALL SYSX11BYTE ;SET MOD LFO1 DCA DEPTH. BUT_LEAVE_TREM: ; BUT_CHNG_END: ; ;.................................................................................................................................................................. ;................................................................................................................................................................... SCANEXIT: ;END OF BUTTONS SCAN. RETURN FAST ;END OF BUTTON HOLDING EDIT ROUTINES. ;============================================================================================================ ;============================================================================================================ FSW1ASIGNCLEAR: ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x78 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x60 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x64 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x68 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x6C ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x70 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x74 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; FSW1REGCLEAR: ; CLRF FSW1ASIGNREG ; CLRF FSW1ASIGNREGBA ; CLRF FSW1ASIGNREGCH ; CLRF FSW1ASIGNREG11 ; CLRF FSW1ASIGNREG12 ; CLRF FSW1ASIGNREG21 ; CLRF FSW1ASIGNREG22 ; RETURN ; ;...................................................................... FSW2ASIGNCLEAR: ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x79 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x61 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x65 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x69 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x6D ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x71 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x75 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; FSW2REGCLEAR: ; CLRF FSW2ASIGNREG ; CLRF FSW2ASIGNREGBA ; CLRF FSW2ASIGNREGCH ; CLRF FSW2ASIGNREG11 ; CLRF FSW2ASIGNREG12 ; CLRF FSW2ASIGNREG21 ; CLRF FSW2ASIGNREG22 ; RETURN ; ;...................................................................... FSW3ASIGNCLEAR: ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x7A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x62 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x66 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x6A ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x6E ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x72 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x76 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; FSW3REGCLEAR: ; CLRF FSW3ASIGNREG ; CLRF FSW3ASIGNREGBA ; CLRF FSW3ASIGNREGCH ; CLRF FSW3ASIGNREG11 ; CLRF FSW3ASIGNREG12 ; CLRF FSW3ASIGNREG21 ; CLRF FSW3ASIGNREG22 ; RETURN ; ;...................................................................... FSW4ASIGNCLEAR: ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x7B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x63 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x67 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x6B ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x6F ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x73 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; ; CLRF EEDATA ;VALUE TO WRITE. MOVLW 0x77 ; MOVWF EEADR ;DATA MEMORY TO WRITE TO. CALL EEPROM_WRITE ; FSW4REGCLEAR: ; CLRF FSW4ASIGNREG ; CLRF FSW4ASIGNREGBA ; CLRF FSW4ASIGNREGCH ; CLRF FSW4ASIGNREG11 ; CLRF FSW4ASIGNREG12 ; CLRF FSW4ASIGNREG21 ; CLRF FSW4ASIGNREG22 ; RETURN ; ;.................................................................................................................................................................................... ;************************************************************************************************************************************************ ACTIVE_SENSING: ; BTFSS MIDISTAT, AS_FLAG ;ACTIVE SENSING ROUTINE. SENDS BRA MAIN_ASTST1 ; ALL SOUND OFF ON ALL 6 MOVF AS_TIMER, 0 ; CHANNELS. BNZ MAIN_ASTST1 ; MOVLW 0x06 ; MOVWF AS_COUNT ; MCONT_AS: ; DECF AS_COUNT ; MOVF AS_COUNT, 0 ; IORLW 0xB0 ;ALL SOUND OFF. MCONTS0: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS0 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x78 ;CONTROL NUMBER. MCONTS1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS1 ; MOVWF TXREG ;SEND MIDI. CLRF WREG ; MCONTS2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MCONTS2 ; MOVWF TXREG ;SEND MIDI. TSTFSZ AS_COUNT ; BRA MCONT_AS ; BCF MIDISTAT, AS_FLAG ; BCF MIDISTAT, NOSTAT_FLAG ; MAIN_ASTST1: ; RETURN ; ;**************************************************************************************************************************************** USARTRCVINTSRV: ;USES BANK 1 AS CIRCULAR BUFFER. BCF PIE1, RCIE ;CLEAR Rcv INT EN BIT. ; MOVFF RCREG, POSTINC1 ; INCF MIDIBYTCNT ; BTFSC FSR1H, 0 ; LFSR 1, 0x200 ;FSR1 IS MIDI BUFFER INDEX. ; MOVLW 0x06 ;Mask out unwanted bits. ANDWF RCSTA, W ;Check for errors BTFSC STATUS, Z ;Was either error status bit set? BRA USARTZ ; BCF RCSTA,CREN ;Clear receiver status BSF RCSTA,CREN ;ENABLE RECEIVER AGAIN. BSF DISPLAYREG, MIDI_LED ;SEND 0 TO RB5, TURNS ON MIDI_LED (RED). BCF DISPLAYREG, GREEN ;TURNS OFF GREEN. USARTZ: ; BSF PIE1, RCIE ;ENABLE Rcv INT. RETFIE 1 ;FAST ;******************************************************************************************************************************************* TIMER0INTSRV: ; MOVWF T0INTWHOLD ; MOVFF STATUS, T0INTSTATHOLD ; ; BCF INTCON, TMR0IE ;CLEAR TIMER0 INT ENABLE BIT. BCF INTCON, TMR0IF ;CLEAR TIMER0 INT FLAG. BCF T0CON, TMR0ON ;STOP TIMER0. MOVLW 0xB1 ;2ms INTERRUPT TIME. MOVWF TMR0H ;45536 DECIMAL - DELAYS. MOVLW 0xE0 ;2ms INTERRUPT TIME. MOVWF TMR0L ;HI & LO UPDATED WITH LO. ; TSTFSZ EMFLASHTIME ; DECF EMFLASHTIME ; TSTFSZ GENTIME1 ; DECF GENTIME1 ; TSTFSZ LEDFLASH ; DECF LEDFLASH ;HOLD AT ZERO. TSTFSZ SCANDEL ;BUTTONS LOCKOUT TIME. DECF SCANDEL ;HOLD AT ZERO. TSTFSZ AS_TIMER ;ACTIVE SENSING DECF AS_TIMER ;HOLD AT ZERO. TSTFSZ PERCON2TIME ; DECF PERCON2TIME ; TSTFSZ PERCON3TIME ; DECF PERCON3TIME ; TSTFSZ DRMEDTIME ;DRUM EDIT BUTTON TIMER. DECF DRMEDTIME ; TSTFSZ MTUNFLASH ; DECF MTUNFLASH ; TSTFSZ MIDILEDFLASH ; DECF MIDILEDFLASH ; ;............................................... MOVF SOLOONTIME, F ; BZ T0INTSOLO ; TSTFSZ SOLOONTIMEA ; DECF SOLOONTIMEA ; TSTFSZ SOLOONTIMEA ; BRA T0INTSOLO ; TSTFSZ SOLOONTIME ;SOLOONTIME IS MULTIPLD BY 10. DECF SOLOONTIME ; MOVLW D'10' ; MOVWF SOLOONTIMEA ; T0INTSOLO: ; ;........................................... MOVF MTUNEDTIME, F ; BZ T0INTMTUN ; TSTFSZ MTUNEDTIMEA ;MASTER TUNE EDIT MODE TIME. DECF MTUNEDTIMEA ; TSTFSZ MTUNEDTIMEA ; BRA T0INTMTUN ; TSTFSZ MTUNEDTIME ;MTUNEDTIME IS MULTIPLD BY 10. DECF MTUNEDTIME ; MOVLW D'10' ; MOVWF MTUNEDTIMEA ; T0INTMTUN: ;................................................... MOVF DRM1EDTIME, F ; BZ T0INTDRM1 ; TSTFSZ DRM1EDTIMEA ;DRUMS1 EDIT MODE TIME. DECF DRM1EDTIMEA ; TSTFSZ DRM1EDTIMEA ; BRA T0INTDRM1 ; TSTFSZ DRM1EDTIME ;MTUNEDTIME IS MULTIPLD BY 5. DECF DRM1EDTIME ; MOVLW D'5' ; MOVWF DRM1EDTIMEA ; T0INTDRM1: ;................................................................... MOVF PBBUTTIME, F ; BZ T0INTPBB1 ; TSTFSZ PBBUTTIMEA ;PITCH BEND EDIT BUTTON TIME. DECF PBBUTTIMEA ; TSTFSZ PBBUTTIMEA ; BRA T0INTPBB1 ; TSTFSZ PBBUTTIME ;PBBUTIME IS MULTIPLD BY 5. DECF PBBUTTIME ; MOVLW D'5' ; MOVWF PBBUTTIMEA ; T0INTPBB1: ;................................................................... MOVFF T0INTSTATHOLD, STATUS ; MOVF T0INTWHOLD, W ; ;................................................................... BSF T0CON, TMR0ON ;START TIMER0. BSF INTCON, TMR0IE ;SET TIMER0 INT ENABLE BIT. RETFIE ; ;************************************************************************************************************************************************* SYSX11BYTE: ;SENDS 11 BYTE SYSX MESSAGES. MOVLW 0xF0 ;SYSX START. SYSX11_SEND1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA SYSX11_SEND1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x41 ;SYSX START. SYSX11_SEND2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA SYSX11_SEND2 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ;SYSX START. SYSX11_SEND3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA SYSX11_SEND3 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x42 ;SYSX START. SYSX11_SEND4: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA SYSX11_SEND4 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x12 ;SYSX START. SYSX11_SEND5: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA SYSX11_SEND5 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x40 ;SYSX START. SYSX11_SEND6: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA SYSX11_SEND6 ; MOVWF TXREG ;SEND MIDI. ; MOVLW 0x01 ;SYSX START. BTFSC GENFLAGS6, SYSX11_B7_FLG ;BYTE 7 FLAG TEST. MOVF SYSX11BYTE7, W ; SYSX11_SEND7: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA SYSX11_SEND7 ; MOVWF TXREG ;SEND MIDI. SYSX11_SEND8: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA SYSX11_SEND8 ; MOVFF SYSX11BYTE8, TXREG ;SEND MIDI. SYSX11_SEND9: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA SYSX11_SEND9 ; MOVFF SYSX11BYTE9, TXREG ;SEND MIDI. MOVLW 0x00 ;SYSX START. SYSX11_SEND10: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA SYSX11_SEND10 ; MOVWF TXREG ;SEND MIDI. MOVLW 0xF7 ;SYSX START. SYSX11_SEND11: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA SYSX11_SEND11 ; MOVWF TXREG ;SEND MIDI. ; BCF GENFLAGS6, SYSX11_B7_FLG ;CLEAR BYTE 7 FLAG. RETURN ; ;************************************************************************************************************************* NORPN7BYTE: ;7 BYTE NRPN or RPN SEND. NORPN_SEND1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA NORPN_SEND1 ; MOVFF NORPNR1, TXREG ;SEND MIDI. NORPN_SEND2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA NORPN_SEND2 ; MOVFF NORPNR2, TXREG ;SEND MIDI. NORPN_SEND3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA NORPN_SEND3 ; MOVFF NORPNR3, TXREG ;SEND MIDI. NORPN_SEND4: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA NORPN_SEND4 ; MOVFF NORPNR4, TXREG ;SEND MIDI. NORPN_SEND5: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA NORPN_SEND5 ; MOVFF NORPNR5, TXREG ;SEND MIDI. NORPN_SEND6: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA NORPN_SEND6 ; MOVFF NORPNR6, TXREG ;SEND MIDI. NORPN_SEND7: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA NORPN_SEND7 ; MOVFF NORPNR7, TXREG ;SEND MIDI. BCF GENFLAGS1, NORPN_FLAG ; NORPN_END: ; RETURN ; ;*************************************************************************************************************************** MIDI3BYTE: ; MOVF BYTE1OF3, W ; MIDI30: ;1st STATUS BYTE. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI30 ; MOVWF TXREG ;SEND MIDI. MOVF BYTE2OF3, W ;2nd DATA BYTE. MIDI31: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI31 ; MOVWF TXREG ;SEND MIDI. MOVF BYTE3OF3, W ;3rd DATA BYTE MIDI32: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA MIDI32 ; MOVWF TXREG ;SEND MIDI. RETURN ; ;*************************************************************************************************************************** PORTAMENTO_ON: ; MOVLW 0xB3 ;PORTAMENTO Ch4. MOVWF BYTE1OF3 ; MOVLW 0x41 ; MOVWF BYTE2OF3 ; MOVLW 0x7F ;PORTAMENTO ON. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB0 ;PORTAMENTO Ch1. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB4 ;PORTAMENTO Ch5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; RETURN ; ;............................................................................................... PORTAMENTO_OFF15: ; MOVLW 0xB0 ;PORTAMENTO Ch1. MOVWF BYTE1OF3 ; MOVLW 0x41 ; MOVWF BYTE2OF3 ; MOVLW 0x00 ;PORTAMENTO OFF. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB4 ;PORTAMENTO Ch5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; BCF GENFLAGS5, PORTA_BIT ; RETURN ; ;............................................................................................... PORTAMENTO_OFF4: ; MOVLW 0xB3 ;PORTAMENTO Ch4. MOVWF BYTE1OF3 ; MOVLW 0x41 ; MOVWF BYTE2OF3 ; MOVLW 0x00 ;PORTAMENTO OFF. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; BCF GENFLAGS5, PORTA_BIT ; RETURN ; ;******************************************************************************** ATAKZEROCH1: ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... DECAY0CH1: ;DECAY CHAN 1 TO DEFAULT. MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;DECAY TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x64 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;DECAY TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... RELEASE0CH1: ;RELEASE TO DEFAULT. MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;RELEASE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x66 ;RELEASE MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;RELEASE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... FO0CH1: ; MOVLW 0xB0 ;SENDS NRPN 0120=vvh MOVWF NORPNR1 ; (VALUE1)(VALUE2)=(VALUE). MOVLW 0x63 ;CONTROL #99. MOVWF NORPNR2 ; MOVLW 0x01 ;VALUE1. MOVWF NORPNR3 ; MOVLW 0x62 ;CONTROL #98. MOVWF NORPNR4 ; MOVLW 0x20 ;VALUE2 MOVWF NORPNR5 ; MOVLW 0x06 ;CONTROL #6. MOVWF NORPNR6 ; MOVLW 0x40 ;Fo DEFAULT. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... Q0CH1: ;FILTER RESONANCE TO DEFAULT VALUE. MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;FILTER RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;................................................................................................ TUNE0CH1: ;SETS CH1 TUNNING TO DEFAULT. MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x02 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;COARSE TUNNING.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... CHORUS1CH1_ON: ;CHORUS 1, Ch 2. MOVLW 0xB0 ;CONTROL SELECT MSB. CH1CH1ONJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH1ONJ1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x5D ;CHORUS SEND LEVEL SELECT. CH1CH1ONJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH1ONJ2 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x60 ;SEND-LEVEL. CH1CH1ONJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH1ONJ3 ; MOVWF TXREG ;SEND MIDI. ; RETURN ; ;............................................................................................... CHORUS1CH1_OFF: ; MOVLW 0xB0 ;CONTROL SELECT MSB. CH1CH1OFFJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH1OFFJ1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x5D ;CHORUS SEND LEVEL SELECT. CH1CH1OFFJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH1OFFJ2 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ;SEND-LEVEL. CH1CH1OFFJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH1OFFJ3 ; MOVWF TXREG ;SEND MIDI. ; RETURN ; ;............................................................................................... ;**************************************************************************** ATAKZEROCH2: ; MOVLW 0xB1 ;CONTROL CH2. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... TUNE0CH2: ;SETS CH2 TUNNING TO DEFAULT. MOVLW 0xB1 ;CONTROL CH2. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x02 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;COARSE TUNNING.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... CHORUS1CH2_ON: ;CHORUS 1, Ch 2. MOVLW 0xB1 ;CONTROL SELECT MSB. CH1CH2ONJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH2ONJ1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x5D ;CHORUS SEND LEVEL SELECT. CH1CH2ONJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH2ONJ2 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x60 ;SEND-LEVEL. CH1CH2ONJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH2ONJ3 ; MOVWF TXREG ;SEND MIDI. ; RETURN ; ;............................................................................................... CHORUS1CH2_OFF: ; MOVLW 0xB1 ;CONTROL SELECT MSB. CH1CH2OFFJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH2OFFJ1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x5D ;CHORUS SEND LEVEL SELECT. CH1CH2OFFJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH2OFFJ2 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ;SEND-LEVEL. CH1CH2OFFJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH2OFFJ3 ; MOVWF TXREG ;SEND MIDI. ; RETURN ; ;............................................................................................... FOZEROCH2: ; MOVLW 0xB1 ;CONTROL CH2. MOVWF NORPNR1 ;Fo MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x20 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;Fo. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;******************************************************************************* TUNE0CH3: ;SETS CH3 BASS TO DEFAULT TUNE. MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x02 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;COARSE TUNNING.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;................................................................................ VIBRATE0CH3: ;VIB RATE TO DEFAULT Ch3. MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x08 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;VIBRATO RATE.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... VIBDEPTH0CH3: ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x09 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;VIBRATO DEPTH.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... VIBDELAY0CH3: ;VIBRATO DELAY CH3 TO DEFAULT. MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x0A ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;VIBRATO DELAY.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;.............................................................................................. ATAK0CH3: ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... DECAY0CH3: ;DECAY CHAN 3 TO DEFAULT. MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;DECAY TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x64 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;DECAY TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... RELEASE0CH3: ;RELEASE TO DEFAULT. MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RELEASE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x66 ;RELEASE MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;RELEASE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... FO0CH3: ; MOVLW 0xB2 ;SENDS NRPN 0120=vvh MOVWF NORPNR1 ; (VALUE1)(VALUE2)=(VALUE). MOVLW 0x63 ;CONTROL #99. MOVWF NORPNR2 ; MOVLW 0x01 ;VALUE1. MOVWF NORPNR3 ; MOVLW 0x62 ;CONTROL #98. MOVWF NORPNR4 ; MOVLW 0x20 ;VALUE2 MOVWF NORPNR5 ; MOVLW 0x06 ;CONTROL #6. MOVWF NORPNR6 ; MOVLW 0x40 ;Fo DEFAULT. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... Q0CH3: ;FILTER RESONANCE TO DEFAULT VALUE. MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;FILTER RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... CHORUS1CH3_ON: ;CHORUS 1, Ch 3. MOVLW 0xB2 ;CONTROL SELECT MSB. CH1CH3ONJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH3ONJ1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x5D ;CHORUS SEND LEVEL SELECT. CH1CH3ONJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH3ONJ2 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x60 ;SEND-LEVEL. CH1CH3ONJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH3ONJ3 ; MOVWF TXREG ;SEND MIDI. ; RETURN ; ;............................................................................................... CHORUS1CH3_OFF: ; MOVLW 0xB2 ;CONTROL SELECT MSB. CH1CH3OFFJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH3OFFJ1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x5D ;CHORUS SEND LEVEL SELECT. CH1CH3OFFJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH3OFFJ2 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ;SEND-LEVEL. CH1CH3OFFJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH3OFFJ3 ; MOVWF TXREG ;SEND MIDI. ; RETURN ; ;******************************************************************************* TUNE0CH4: ;RH2 (CH4) DEFAULT COARSE TUNE. BCF GENFLAGS1, RH2OCTBIT ; BCF GENFLAGS3, RH224OCTD_BIT; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x02 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;COARSE TUNNING.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; RETURN ; ;.............................................................................................. VIBRATE0CH4: ;VIB RATE TO DEFAULT Ch4. MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x08 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;VIBRATO RATE.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... VIBDEPTH0CH4: ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x09 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;VIBRATO DEPTH.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... VIBDELAY0CH4: ;VIBRATO DELAY CH4 TO DEFAULT. MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x0A ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;VIBRATO DELAY.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... ATAKZEROCH4: ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... DECAY0CH4: ;DECAY CHAN 4 TO DEFAULT. MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ;DECAY TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x64 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;DECAY TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... FO0CH4: ; MOVLW 0xB3 ;SENDS NRPN 0120=vvh MOVWF NORPNR1 ; (VALUE1)(VALUE2)=(VALUE). MOVLW 0x63 ;CONTROL #99. MOVWF NORPNR2 ; MOVLW 0x01 ;VALUE1. MOVWF NORPNR3 ; MOVLW 0x62 ;CONTROL #98. MOVWF NORPNR4 ; MOVLW 0x20 ;VALUE2 MOVWF NORPNR5 ; MOVLW 0x06 ;CONTROL #6. MOVWF NORPNR6 ; MOVLW 0x40 ;Fo DEFAULT. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... Q0CH4: ;FILTER RESONANCE TO DEFAULT VALUE. MOVLW 0xB4 ;CONTROL CH4. MOVWF NORPNR1 ;FILTER RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... CHORUS1CH4_ON: ;CHORUS 1, Ch 4. MOVLW 0xB3 ;CONTROL SELECT MSB. CH1CH4ONJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH4ONJ1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x5D ;CHORUS SEND LEVEL SELECT. CH1CH4ONJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH4ONJ2 ; MOVWF TXREG ;SEND MIDI. MOVF CHORUSENDLEV, W ;SEND-LEVEL. CH1CH4ONJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH4ONJ3 ; MOVWF TXREG ;SEND MIDI. ; RETURN ; ;............................................................................................... CHORUS1CH4_OFF: ; MOVLW 0xB3 ;CONTROL SELECT MSB. CH1CH4OFFJ1: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH4OFFJ1 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x5D ;CHORUS SEND LEVEL SELECT. CH1CH4OFFJ2: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH4OFFJ2 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ;SEND-LEVEL. CH1CH4OFFJ3: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA CH1CH4OFFJ3 ; MOVWF TXREG ;SEND MIDI. ; RETURN ; ;******************************************************************************** ATAK0CH5: ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... TUNE0CH5: ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;FINE TUNING IN CENTS.0x40=CENTRE. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... FO0CH5: ; MOVLW 0xB4 ;SENDS NRPN 0120=vvh MOVWF NORPNR1 ; (VALUE1)(VALUE2)=(VALUE). MOVLW 0x63 ;CONTROL #99. MOVWF NORPNR2 ; MOVLW 0x01 ;VALUE1. MOVWF NORPNR3 ; MOVLW 0x62 ;CONTROL #98. MOVWF NORPNR4 ; MOVLW 0x20 ;VALUE2 MOVWF NORPNR5 ; MOVLW 0x06 ;CONTROL #6. MOVWF NORPNR6 ; MOVLW 0x40 ;Fo DEFAULT. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... Q0CH5: ;FILTER RESONANCE TO DEFAULT VALUE. MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ;FILTER RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... VIBRATE0CH5: ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x08 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;VIBRATO RATE.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... VIBDEPTH0CH5: ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x09 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;VIBRATO DEPTH.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;............................................................................................... VIBDELAY0CH5: ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x0A ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;VIBRATO DELAY.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; RETURN ; ;****************************************************************************** FINETUNE0CH6: ;Bass (CH6) DEFAULT fine TUNE. ; MOVLW 0xB5 ;CONTROL CH6. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x02 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;COARSE TUNNING.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; RETURN ; ;******************************************************************************* COARSETUNE0CH6: ; MOVLW 0xB5 ;CONTROL CH6. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x02 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;COARSE TUNNING.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; RETURN ; ;................................................................................................................................................................................................................ ALLNOTESOFFCH7: ; MOVLW 0xB6 ;CONTROL. ALL SOUND OFF CHAN 7. ACONTS7ROL01: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA ACONTS7ROL01 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x78 ;CONTROL NUMBER. ACONTS7ROL02: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA ACONTS7ROL02 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x00 ; ACONTS7ROL03: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA ACONTS7ROL03 ; MOVWF TXREG ;SEND MIDI. RETURN ; ;********************************************************************************************************************************************************************** SEND_EXPR: ;SEND EXPRESSION VALUE ON ChS 1,4 & 5. MOVLW 0xB0 ;SELECT CONTROL ON Ch1. RH128MIDI30: ;1st STATUS BYTE. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI30 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x0B ;EXPRESSION. RH128MIDI31: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI31 ; MOVWF TXREG ;SEND MIDI. MOVF SOLOVAL, W ; ; MULWF LEVEL_ADJ_CH1 ;BALANCE Ch1 LEVEL STORE. RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; MOVF PRODH, W ; RH128MIDI32: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI32 ; MOVWF TXREG ;SEND MIDI. ;..................... MOVLW 0xB4 ;SELECT CONTROL ON Ch5. RH128MIDI33: ;1st STATUS BYTE. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI33 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x0B ;EXPRESSION. RH128MIDI34: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI34 ; MOVWF TXREG ;SEND MIDI. MOVF SOLOVAL, W ; ; MULWF LEVEL_ADJ_CH5 ;BALANCE Ch5 LEVEL STORE. RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; MOVF PRODH, W ; RH128MIDI35: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI35 ; MOVWF TXREG ;SEND MIDI. ;........................................................................................................................................................................................ MOVLW 0xB3 ;SELECT CONTROL ON Ch4. RH128MIDI36: ;1st STATUS BYTE. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI36 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x0B ;EXPRESSION. RH128MIDI37: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI37 ; MOVWF TXREG ;SEND MIDI. MOVF SOLOVAL, W ; ; MULWF LEVEL_ADJ_CH4 ;BALANCE Ch4 LEVEL STORE. RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; MOVF PRODH, W ; RH128MIDI38: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI38 ; MOVWF TXREG ;SEND MIDI. ;........................................................................................................................................................................................ MOVLW 0xB6 ;SELECT CONTROL ON Ch7. RH128MIDI39: ;1st STATUS BYTE. BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI39 ; MOVWF TXREG ;SEND MIDI. MOVLW 0x0B ;EXPRESSION. RH128MIDI40: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI40 ; MOVWF TXREG ;SEND MIDI. MOVF SOLOVAL, W ; ; MULWF LEVEL_ADJ_CH7 ;BALANCE Ch7 LEVEL STORE. RLNCF PRODH ; MOVLW 0xFF ; CPFSLT PRODL ; BSF PRODH, 0 ; MOVF PRODH, W ; RH128MIDI41: ; BTFSS TXSTA, TRMT ;SET WHEN TxShiftReg IS EMPTY. BRA RH128MIDI41 ; MOVWF TXREG ;SEND MID ; RETURN ; ;*********************************************************************************************************************************************************************** EEPROM_WRITE: ; BCF EECON1, EEPGD ;POINT TO DATA MEMORY. BCF EECON1, CFGS ; BSF EECON1, WREN ;ENABLE WRITES. BCF INTCON, GIE ;DISABLE INTERRUPTS. MOVLW 0x55 ; MOVWF EECON2 ; MOVLW 0xAA ; MOVWF EECON2 ; BSF EECON1, WR ;SET BIT TO START WRITES. BSF INTCON, GIE ;ENABLE INTERRUPTS. EEW1: ; ; BTFSS PIR2, EEIF ;WRITE-COMPLETE INTERRUPT FLAG. BTFSC EECON1, WR ; - OR THIS WRITE-COMPLETE BRA EEW1 ;WAIT FOR WRITE TO FINISH. BCF EECON1, WREN ;DISABLE WRITES. BCF PIR2, EEIF ;WRITE-COMPLETE INTERRUPT FLAG. RETURN ; ;****************************************************************************************************************************************************** EEPROM_READ: ;ADDRESS IN IN WREG, DATA OUT IN WREG. MOVWF EEADR ;EEPROM ADDRESS. BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. ; RETURN ; ;****************************************************************************************************************************************************** FACTORYLOAD: ; BCF STATUS, C ;Clear carry flag. RLCF TEMP2 ;MULT x 2, SAVE IN TEMP2. ; MOVLW HIGH(FACTABLE) ;GET HIGH BYTE OF TABLE ADDRESS. BTFSC STATUS, C ;ADD IN OFFSET. INCF WREG ; MOVWF PCLATH ;MODIFY IF REQUIRED. ; MOVLW LOW(FACTABLE) ; ADDWF TEMP2, W ;TEMP2 HAS TABLE OFFSET IN IT. BTFSC STATUS, C ; INCF PCLATH ; MOVWF PCL ;MAKE JUMP TO TABLE. PCLATH & ; PCLATU WRITTEN TO PCH & PCU. FACTABLE: ;Basses - BANK 1. RETLW D'32' ;33 B1 :Acoustic Bass. :EEPROM ADDRESS 0x00. RETLW D'35' ;36 B2 :PIANO 1 + Acoustic BASS. :ADDRESS 0x01. RETLW D'0' ;1 B3 :Grand Piano 1 + Piano 2. :ADDRESS 0x02. RETLW D'49' ;50 B4 :String Ensemble 2. :ADDRESS 0x03. RETLW D'32' ;33 B5 :Acoustic Bass. :ADDRESS 0x04. RETLW D'255';NOT USED FROM THIS VERSION. :ADDRESS 0x05. ;Chords - BANK 1. RETLW D'0' ;1 C1 :Grand Piano 1. :ADDRESS 0x06. RETLW D'52' ;53 C2 :Choir Aahs. :ADDRESS 0x07. RETLW D'105';106 C3 :Banjo. :ADDRESS 0x08. RETLW D'49' ;50 C4 :String Ensemble 2. :ADDRESS 0x09. RETLW D'25' ;25 C5 :Guitar nylon. :ADDRESS 0x0A. RETLW D'19' ;20 C6 :Church organ. :ADDRESS 0x0B. ;Righthand 1 RETLW D'0' ;1 RH1-1 :Grand Piano. :ADDRESS 0x0C. RETLW D'0' ;1 RH1-2 :Piano+StringEnsemble 1 +(slo atack). :ADDRESS 0x0D. RETLW D'3' ;4 RH1-3 :Honkytonk4. :ADDRESS 0x0E. RETLW D'26' ;27 RH1-4 :Jazz guitar + PEDAL-STEEL. :ADDRESS 0x0F. RETLW D'25' ;26 RH1-5 :Acoustic steel Guitar. :ADDRESS 0x10. RETLW D'23' ;24 RH1-6 :FRENCH ACCORDION 22, :ADDRESS 0x11. ;HARMONICA 23, TANGO ACCORDION 24. ;Righthand 1. RETLW D'49' ;50 RH1-7 :StringEnsemble2 +Ch5 (STRINGENSEMBLE 1). :ADDRESS 0x12. RETLW D'88' ;89 RH1-8 : Fantasia. :ADDRESS 0x13. RETLW D'109' ;110 RH1-9 : Bagpipes. :ADDRESS 0x14. RETLW D'73' ;74 RH1-10 : Flute. :ADDRESS 0x15. RETLW D'75' ;76 RH1-11 : Pan Flute. :ADDRESS 0x16. RETLW D'61' ;62 RH1-12 : BRASS SECTION. :ADDRESS 0x17. ;Righthand 2, 1 to 6. RETLW D'16' ;17 RH2-1 : DRAWBAR ORGAN(Wurlitzer)+chorus+vibrato. :ADDRESS 0x18. RETLW D'19' ;20 RH2-2 : Church organ + chorus. :ADDRESS 0x19. RETLW D'99' ;100 RH2-3 : Fx4 Atmosphere. :ADDRESS 0x1A. RETLW D'40' ;41 RH2-4 : Violins + delay vibrato more. :ADDRESS 0x1B. RETLW D'57' ;58 RH2-5 : Trombone. :ADDRESS 0x1C. RETLW D'63' ;64 RH2-6 : Synth brass2. :ADDRESS 0x1D. ;Righthand 2, 7 to 12. RETLW D'4' ;5 RH2-7 : ELECTRIC PIANO 1. :ADDRESS 0x1E. RETLW D'91' ;92 RH2-8 : PAD 4 CHOIR. :ADDRESS 0x1F. RETLW D'105';106 RH2-9 : Banjo. :ADDRESS 0x20. RETLW D'24' ;25 RH2-10 : Nylon Guitar down 8ve. :ADDRESS 0x21. RETLW D'22' ;23 RH2-11 : Harmonica :ADDRESS 0x22. RETLW D'82' ;83 RH2-12 : CALLIOPE. :ADDRESS 0x23. ; RETLW D'20' ;BASS 1 REVERB ::ADDRESS 0x24. RETLW D'20' ;BASS 2 REVERB ::ADDRESS 0x25. RETLW D'60' ;BASS 3 REVERB ::ADDRESS 0x26. RETLW D'20' ;BASS 4 REVERB ::ADDRESS 0x27. RETLW D'20' ;BASS 5 REVERB ::ADDRESS 0x28. RETLW D'0' ;NOT USED. :ADDRESS 0x29. ; RETLW D'70' ;CHORD 1 REVERB ::ADDRESS 0x2A. RETLW D'28' ;CHORD 2 REVERB : RETLW D'28' ;CHORD 3 REVERB : RETLW D'28' ;CHORD 4 REVERB : RETLW D'28' ;CHORD 5 REVERB : RETLW D'28' ;CHORD 6 REVERB : ; RETLW D'38' ;RH1 1 REVERB : RETLW D'38' ;RH1 2 REVERB : RETLW D'38' ;RH1 3 REVERB : RETLW D'74' ;RH1 4 REVERB :Slide Guitar. RETLW D'38' ;RH1 5 REVERB : RETLW D'58' ;RH1 6 REVERB : ; RETLW D'38' ;RH1 7 REVERB : RETLW D'38' ;RH1 8 REVERB : RETLW D'38' ;RH1 9 REVERB : RETLW D'38' ;RH1 10 REVERB : RETLW D'38' ;RH1 11 REVERB : RETLW D'38' ;RH1 12 REVERB : ; RETLW D'38' ;RH2 1 REVERB : RETLW D'38' ;RH2 2 REVERB : RETLW D'38' ;RH2 3 REVERB : RETLW D'38' ;RH2 4 REVERB : RETLW D'38' ;RH2 5 REVERB : RETLW D'38' ;RH2 6 REVERB : ; RETLW D'38' ;RH2 7 REVERB : RETLW D'38' ;RH2 8 REVERB : RETLW D'38' ;RH2 9 REVERB : RETLW D'38' ;RH2 10 REVERB : RETLW D'38' ;RH2 11 REVERB : RETLW D'38' ;RH2 12 REVERB : ;BASSES - BANK 2. RETLW D'58' ;59 B7 :TUBA. RETLW D'0' ;1 B8 :Acoustic Piano. RETLW D'35' ;36 B9 :FRETLESS BASS. RETLW D'22' ;Harmonica. B10 :Accordion BASS. RETLW D'34' ;35 B11 :PICKED BASS. RETLW D'0' ;NOT USED. Button is used as bass register shift. ;Chords - BANK 2. RETLW D'3' ;4 C7 :Honky piano. + snare drum. RETLW D'58' ;59 C8 :Tuba. RETLW D'22' ;23. C9 :.Harmonica. RETLW D'4' ; C10 :Electric Piano1. RETLW D'6' ;7 C11 :Harpsichord. RETLW D'54' ;55 C12 :Synth voice. ; RETLW D'20' ;BASS 7 REVERB : RETLW D'128' ;BASS 8 REVERB : RETLW D'20' ;BASS 9 REVERB : RETLW D'20' ;BASS 10 REVERB : RETLW D'20' ;BASS 11 REVERB : RETLW D'0' ;NOT USED. ; RETLW D'55' ;CHD 7 REVERB : RETLW D'28' ;CHD 8 REVERB : RETLW D'28' ;CHD 9 REVERB : RETLW D'28' ;CHD 10 REVERB : RETLW D'28' ;CHD 11 REVERB : RETLW D'28' ;CHD 12 REVERB : ADDRESS 0x5F ;FOOTSWITCH ASSIGNMNETS. ALL SET TO ZERO. RETLW D'0' ;FSW1ASSIGNREGBA. ADDRESS 0x60 RETLW D'0' ;FSW2ASSIGNREGBA. 0x61 RETLW D'0' ;FSW3ASSIGNREGBA. 0x62 RETLW D'0' ;FSW4ASSIGNREGBA. 0x63 RETLW D'0' ;FSW1ASSIGNREGCH. 0x64 RETLW D'0' ;FSW2ASSIGNREGCH. 0x65 RETLW D'0' ;FSW3ASSIGNREGCH. 0x66 RETLW D'0' ;FSW4ASSIGNREGCH. 0x67 RETLW D'0' ;FSW1ASSIGNREG11. 0x68 RETLW D'0' ;FSW2ASSIGNREG11. 0x69 RETLW D'0' ;FSW3ASSIGNREG11. 0x6A RETLW D'0' ;FSW4ASSIGNREG11. 0x6B RETLW D'0' ;FSW1ASSIGNREG12. 0x6C RETLW D'0' ;FSW2ASSIGNREG12. 0x6D RETLW D'0' ;FSW3ASSIGNREG12. 0x6E RETLW D'0' ;FSW4ASSIGNREG12. 0x6F RETLW D'0' ;FSW1ASSIGNREG21. 0x70 RETLW D'0' ;FSW2ASSIGNREG21. 0x71 RETLW D'0' ;FSW3ASSIGNREG21. 0x72 RETLW D'0' ;FSW4ASSIGNREG21. 0x73 RETLW D'0' ;FSW1ASSIGNREG22. 0x74 RETLW D'0' ;FSW2ASSIGNREG22. 0x75 RETLW D'0' ;FSW3ASSIGNREG22. 0x76 RETLW D'0' ;FSW4ASSIGNREG22. 0x77 RETLW D'0' ;FSW1ASSIGNREG. 0x70 RETLW D'0' ;FSW2ASSIGNREG. 0x79 RETLW D'0' ;FSW3ASSIGNREG. 0x7A RETLW D'0' ;FSW4ASSIGNREG. 0x7B ;EEPROM FACTORY TABLE - FURTHER ADRESSES :- ;0x00 -> 0x5F = INSTRUMENT SOUND AND Fx SETTINGS (AS SHOWN ABOVE). ;0x60 -> 0x7B = FOOTSWITCH ASSIGNMENT STORAGE (28 LOCATIONS AS SHOWN ABOVE, 4 FSWs x 7 rows of buttons). ; ;0xC0 = SOFTWARE REVISION NUMBER 1 IN ASCII. '0' = 0x30. ;0xC1 = SOFTWARE REVISION NUMBER 2 IN ASCII. '0' = 0x30. ;0xC2 = SOFTWARE REVISION NUMBER 3 IN ASCII. '1' = 0x31. ;0xC3 = SOFTWARE REVISION NUMBER 4 IN ASCII. 'e' = 0x65. ; ;0xE8 = PITCH bend SLIDE AMOUNT. ;0xE9 = PITCH bend SLIDE TIME. ;0xEA = SOLO VOL LEVEL. ;0xEB = DRUM3 CHORDS VOL. ;0xEC = DRUM3 BASS VOL. ;0xED = DRUM2 CHORDS VOL. ;0xEE = DRUM2 BASS VOL. ;0xEF = MASTER TUNNING VALUE. ;0xF0 = CHAN1 CONVERT TO CHAN3 STATUS: 0 = NO CONVERT. ;0xF1 = DRUM1 CHORDS PERCUSSION VOLUME - level.(60) ;0xF2 = REPEAT RATE VALUE. ;0xF3 = MIDI notes only mode. OFF is mode on. ;0xF4 = TREMOLO SPEED VALUE. ;0xF5 = TREMOLO DEPTH VALUE. ;0XF6 = Blank. ;0XF7 = Blank. ;0XF8 = Blank. ;0xF9 = BYPASS 'CAVAGNOLO' CHANNEL CONVERSION ON Ch 14,15,16. (00.) ;0xFA = DRUM1 BASS PERCUSSION VOLUME - level (60). ;0xFB = PORTAMENTO MASTER VALUE. ;0xFC = CURRENT BANK SELECT LSB.(00) ;0xFD = CURRENT BANK SELECT MSB (00). ;0xFE = DATA INTEGRITY CHECK (0x55). ;0xFF = DATA INTEGRITY CHECK (0xAA). ;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- BASSOUND1A: ;PARAMETERS FOR BASS1 (BANK A) SOUND. MOVLW 0x24 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. ; MOVWF BYTE3OF3 ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ;MOVLW 0xB5 ;BASS CHANNEL 6. ;MOVWF BYTE1OF3 ; ;CALL MIDI3BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x45 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RELEASE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x66 ;RELEASE MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x50 ;RELEASE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x30 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;Fo MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x20 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x30 ;Fo. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x70 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH3 ; ;CALL FO0CH3 ; ;CALL Q0CH3 ; ;CALL ATAK0CH3 ; CALL DECAY0CH3 ; ;CALL RELEASE0CH3 ; CALL VIBRATE0CH3 ; CALL VIBDEPTH0CH3 ; CALL VIBDELAY0CH3 ; CALL CHORUS1CH3_OFF ; CALL COARSETUNE0CH6 ;SET COARSE TUNING TO ZERO. ; RETURN ; ;................................................................................................................................................................................................................ BASSOUND1BL2: ;PARAMETERS FOR BASS1B SOUND LAYER 2. MOVLW 0xC5 ;Ch6 - BASS 2nd LAYER SOUND. MOVWF PROGCHHOLD1 ; MOVLW D'57' ;58.- TROMBONE. MOVWF PROGCHHOLD2 ; CALL PROGCHNGSEND ;EXTRA BASS LAYER. ; MOVLW 0xB5 ;BASS CHANNEL 6. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x40 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x54 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. ; MOVWF BYTE3OF3 ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB5 ;BASS CHANNEL 6. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; CALL COARSETUNE0CH6 ;SET COARSE TUNING TO ZERO. RETURN ; ;........................................................................................................................................................................................ BASSOUND1BL1: ;PARAMETERS FOR BASS1B SOUND LAYER 1. MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x01 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x6F ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x02 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x34 ;34 : COARSE TUNNING.0x40=NO MOD. MOVWF NORPNR7 ;DOWN 1 OCTAVE. CALL NORPN7BYTE ; ; CALL FO0CH3 ; ;CALL Q0CH3 ; CALL ATAK0CH3 ; CALL DECAY0CH3 ; CALL RELEASE0CH3 ; CALL VIBRATE0CH3 ; CALL VIBDEPTH0CH3 ; CALL VIBDELAY0CH3 ; CALL CHORUS1CH3_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ BASSOUND2AL2 ; MOVLW 0xC5 ;Ch6 - BASS 2nd LAYER SOUND. MOVWF PROGCHHOLD1 ; MOVLW D'0' ;1 - PIANO. MOVWF PROGCHHOLD2 ; CALL PROGCHNGSEND ;EXTRA LAYER. ; MOVLW 0xB5 ;BASS CHANNEL 6. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x58 ;REDUCE LEVEL MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x25 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB5 ;BASS CHANNEL 6. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB5 ;CONTROL CH6. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x3F ;FINE TUNING IN CENTS.0x40=CENTRE. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; CALL COARSETUNE0CH6 ;SET COARSE TUNING TO ZERO. ; RETURN ; ;........................................................................................................................................................................................ BASSOUND2AL1: ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x01 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RELEASE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x66 ;RELEASE MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x58 ;RELEASE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; ; MOVLW 0xB2 ;CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x6F ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; ;CALL TUNE0CH3 ; CALL FO0CH3 ; ;CALL Q0CH3 ; CALL ATAK0CH3 ; CALL DECAY0CH3 ; ;CALL RELEASE0CH3 ; CALL VIBRATE0CH3 ; CALL VIBDEPTH0CH3 ; CALL VIBDELAY0CH3 ; CALL CHORUS1CH3_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ BASSOUND2BL1: ; MOVLW 0x55 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ;MOVLW 0xB5 ;BASS CHANNEL 6. ;MOVWF BYTE1OF3 ; ;CALL MIDI3BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x01 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x09 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x41 ;VIBRATO DEPTH.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x6F ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH3 ; CALL FO0CH3 ; ;CALL Q0CH3 ; CALL ATAK0CH3 ; CALL DECAY0CH3 ; CALL RELEASE0CH3 ; CALL VIBRATE0CH3 ; CALL VIBDELAY0CH3 ; CALL CHORUS1CH3_OFF ; ;CALL COARSETUNE0CH6 ;SET COARSE TUNING TO ZERO. ; RETURN ; ;................................................................................................................................................................................................................ BASSOUND3AL2: ; MOVLW 0xC5 ;Ch6. MOVWF PROGCHHOLD1 ; MOVLW D'1' ;2 - GRAND PIANO 2. MOVWF PROGCHHOLD2 ; CALL PROGCHNGSEND ;EXTRA LAYER 2. ; MOVLW 0xB5 ;CHANNEL 6. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x30 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x26 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB5 ;BASS CHANNEL 6. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB5 ;CONTROL CH6. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x02 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x34 ;34 : COARSE TUNNING.0x40=NO MOD. MOVWF NORPNR7 ;DOWN 1 OCTAVE. CALL NORPN7BYTE ; ; MOVLW 0xB5 ;CONTROL CH6. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x3F ;FINE TUNING IN CENTS.0x40=CENTRE. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; RETURN ; ;........................................................................................................................................................................................ BASSOUND3AL1: ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x01 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x68 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; ;CALL TUNE0CH3 ; CALL FO0CH3 ; ;CALL Q0CH3 ; CALL ATAK0CH3 ; CALL DECAY0CH3 ; CALL RELEASE0CH3 ; CALL VIBRATE0CH3 ; CALL VIBDEPTH0CH3 ; CALL VIBDELAY0CH3 ; CALL CHORUS1CH3_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ BASSOUND3BL2: ; MOVLW 0xC5 ;Ch6. MOVWF PROGCHHOLD1 ; MOVLW D'33' ;34 - FINGER BASS. MOVWF PROGCHHOLD2 ; CALL PROGCHNGSEND ;EXTRA LAYER. ; MOVLW 0xB5 ;BASS CHANNEL 6. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x50 ;LEVEL MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x56 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB5 ;BASS CHANNEL 6. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; CALL COARSETUNE0CH6 ;SET COARSE TUNING TO ZERO. ; RETURN ; ;........................................................................................................................................................................................ BASSOUND3BL1: ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x01 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x6F ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH3 ; CALL FO0CH3 ; ;CALL Q0CH3 ; CALL ATAK0CH3 ; CALL DECAY0CH3 ; CALL RELEASE0CH3 ; CALL VIBRATE0CH3 ; CALL VIBDEPTH0CH3 ; CALL VIBDELAY0CH3 ; CALL CHORUS1CH3_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ BASSOUND4AL1: ; MOVLW 0x27 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x01 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x6F ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH3 ; CALL FO0CH3 ; ;CALL Q0CH3 ; CALL ATAK0CH3 ; CALL DECAY0CH3 ; CALL RELEASE0CH3 ; CALL VIBRATE0CH3 ; CALL VIBDEPTH0CH3 ; CALL VIBDELAY0CH3 ; CALL CHORUS1CH3_OFF ; CALL COARSETUNE0CH6 ;SET COARSE TUNING TO ZERO. ; RETURN ; ;................................................................................................................................................................................................................ BASSOUND4BL1: ; MOVLW 0x57 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ;MOVLW 0xB5 ;BASS CHANNEL 6. ;MOVWF BYTE1OF3 ; ;CALL MIDI3BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x46 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RELEASE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x66 ;RELEASE MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;RELEASE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x01 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;Fo MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x20 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x20 ;Fo. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x6F ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH3 ; ;CALL FO0CH3 ; ;CALL Q0CH3 ; ;CALL ATAK0CH3 ; CALL DECAY0CH3 ; ;CALL RELEASE0CH3 ; CALL VIBRATE0CH3 ; CALL VIBDEPTH0CH3 ; CALL VIBDELAY0CH3 ; CALL CHORUS1CH3_OFF ; CALL COARSETUNE0CH6 ;SET COARSE TUNING TO ZERO. ; RETURN ; ;................................................................................................................................................................................................................ BASSOUND5AL1: ; MOVLW 0x28 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ;MOVLW 0xB5 ;BASS CHANNEL 6. ;MOVWF BYTE1OF3 ; ;CALL MIDI3BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x46 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RELEASE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x66 ;RELEASE MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x58 ;RELEASE. 0x40=NO MODIFY. (was 58). *** ??? MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x30 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;Fo MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x20 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x30 ;Fo. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x6F ;LEVEL EDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH3 ; ;CALL FO0CH3 ; ;CALL Q0CH3 ; ;CALL ATAK0CH3 ; CALL DECAY0CH3 ; ;CALL RELEASE0CH3 ; CALL VIBRATE0CH3 ; CALL VIBDEPTH0CH3 ; CALL VIBDELAY0CH3 ; CALL CHORUS1CH3_OFF ; CALL COARSETUNE0CH6 ;SET COARSE TUNING TO ZERO. ; RETURN ; ;................................................................................................................................................................................................................ BASSOUND5BL1: ; MOVLW 0x58 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL = CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB2 ;CONTROL CH3. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x01 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB2 ;BASS CHANNEL 3. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x6F ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH3 ; CALL FO0CH3 ; ;CALL Q0CH3 ; CALL ATAK0CH3 ; CALL DECAY0CH3 ; CALL RELEASE0CH3 ; CALL VIBRATE0CH3 ; CALL VIBDEPTH0CH3 ; CALL VIBDELAY0CH3 ; CALL CHORUS1CH3_OFF ; CALL COARSETUNE0CH6 ;SET COARSE TUNING TO ZERO. ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND1A: ; MOVLW 0x2A ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CONTROL CH2. MOVWF NORPNR1 ;Fo MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x20 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x38 ;Fo. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x40 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH2 ; CALL ATAKZEROCH2 ; ;CALL FOZEROCH2 ; CALL CHORUS1CH2_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND2A: ; MOVLW 0x2B ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CONTROL CH2. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x44 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x40 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL FOZEROCH2 ; CALL TUNE0CH2 ; ; MOVLW 0x3D ;SELECT CHORUS RATE. MOVWF SYSX11BYTE8 ; MOVLW 0x00 ;CHORUS RATE VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET CHORUS RATE. ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND3A: ; MOVLW 0x2C ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x3A ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH2 ; CALL ATAKZEROCH2 ; CALL FOZEROCH2 ; CALL CHORUS1CH2_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND4A: ; MOVLW 0x2D ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x40 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH2 ; CALL ATAKZEROCH2 ; CALL FOZEROCH2 ; CALL CHORUS1CH2_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND5A: ; MOVLW 0x2E ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x40 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH2 ; CALL ATAKZEROCH2 ; CALL FOZEROCH2 ; CALL CHORUS1CH2_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND6A: ; MOVLW 0x2F ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x40 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH2 ; CALL ATAKZEROCH2 ; CALL FOZEROCH2 ; CALL CHORUS1CH2_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND1B: ; MOVLW 0x5A ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x40 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH2 ; CALL ATAKZEROCH2 ; CALL FOZEROCH2 ; CALL CHORUS1CH2_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND2B: ; MOVLW 0x5B ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x40 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL ATAKZEROCH2 ; CALL FOZEROCH2 ; CALL TUNE0CH2 ; CALL CHORUS1CH2_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND3B: ; MOVLW 0x5C ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x40 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH2 ; CALL ATAKZEROCH2 ; CALL FOZEROCH2 ; CALL CHORUS1CH2_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND4B: ; MOVLW 0x5D ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x50 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH2 ; CALL ATAKZEROCH2 ; CALL FOZEROCH2 ; CALL CHORUS1CH2_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND5B: ; MOVLW 0x5E ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x40 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH2 ; CALL ATAKZEROCH2 ; CALL FOZEROCH2 ; CALL CHORUS1CH2_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ CHORDSOUND6B: ; MOVLW 0x5F ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB1 ;CHORD CHANNEL 2. MOVWF BYTE1OF3 ; MOVLW 0x0B ;EXPRESSION. MOVWF BYTE2OF3 ; MOVLW 0x40 ;LEVEL REDUCTION, 7F=100%. MOVWF BYTE3OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH2 ; CALL ATAKZEROCH2 ; CALL FOZEROCH2 ; CALL CHORUS1CH2_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND1: ; MOVLW 0x30 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x70 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR. MOVLW 0x70 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR. CALL SEND_EXPR ;SEND SOLO VALUE. ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x18 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;Fo MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x20 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x50 ;Fo. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; ; CALL TUNE0CH1 ;SETS COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. ;CALL FO0CH1 ;FILTER FRQUENCY. ;CALL Q0CH1 ;CH1 Q. CALL PORTAMENTO_OFF15 ; ;CALL ALLNOTESOFFCH7 ; CALL CHORUS1CH1_OFF ; CALL ATAK0CH5 ; ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND2: ; MOVLW 0x31 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB4 ;RH1 LAYER CHANNEL 5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x6F ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR. MOVLW 0x6F ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR. CALL SEND_EXPR ;SEND SOLO VALUE. ; CALL TUNE0CH1 ;SETS COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. CALL FO0CH1 ;FILTER FRQUENCY. CALL Q0CH1 ;CH1 Q. CALL PORTAMENTO_OFF15 ; ;CALL ALLNOTESOFFCH7 ; CALL CHORUS1CH1_OFF ; ; RETURN ; ;........................................................................................................................................................................................ RH1SOUND2L2: ; MOVLW D'48' ;STRINGS2 - 49. MOVWF PROGCHHOLD2 ; MOVLW 0xC4 ;Ch5. MOVWF PROGCHHOLD1 ; CALL PROGCHNGSEND ;EXTRA RH1. LAYER. ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x60 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; CALL FO0CH5 ; CALL Q0CH5 ; CALL TUNE0CH5 ; CALL VIBRATE0CH5 ; CALL VIBDEPTH0CH5 ; CALL VIBDELAY0CH5 ; ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND3: ; MOVLW 0x32 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB4 ;RH1 LAYER CHANNEL 5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH1 ;SETS COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. CALL FO0CH1 ;FILTER FRQUENCY. CALL Q0CH1 ;CH1 Q. CALL PORTAMENTO_OFF15 ; ;CALL ALLNOTESOFFCH7 ; ; MOVLW 0x68 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR. MOVLW 0x68 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR. CALL SEND_EXPR ;SEND SOLO VALUE. ; RETURN ; ;........................................................................................................................................................................................ RH1SOUND3L2: ; MOVLW D'2' ;3 - ELECTRIC GRAND PIANO. MOVWF PROGCHHOLD2 ; MOVLW 0xC4 ;Ch5. MOVWF PROGCHHOLD1 ; CALL PROGCHNGSEND ;EXTRA RH1. LAYER. ; CALL FO0CH5 ; CALL Q0CH5 ; CALL ATAK0CH5 ; CALL VIBRATE0CH5 ; CALL VIBDEPTH0CH5 ; CALL VIBDELAY0CH5 ; ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x3D ;FINE TUNING IN CENTS.0x40=CENTRE. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND4: ; ; MOVLW 0x33 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB4 ;RH1 LAYER CHANNEL 5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH1 ;SETS COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. CALL FO0CH1 ;FILTER FRQUENCY. CALL Q0CH1 ;CH1 Q. ;CALL ALLNOTESOFFCH7 ; CALL CHORUS1CH1_OFF ; ; RETURN ; ;........................................................................................................................................................................................ RH1SOUND4L2: ; MOVLW d'26' ;Jazz Guitar 27. MOVWF PROGCHHOLD2 ; MOVLW 0xC4 ;Ch5. MOVWF PROGCHHOLD1 ; CALL PROGCHNGSEND ;EXTRA RH1. LAYER. ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x48 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x08 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x3B ;VIBRATO RATE.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x09 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x50 ;VIBRATO DEPTH.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x0A ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x50 ;VIBRATO DELAY.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0x68 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR CHANNEL 1. MOVLW 0x68 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR CHANNEL 5. CALL SEND_EXPR ;SEND SOLO VALUE. ; CALL TUNE0CH5 ;Fine tunning to zero. CALL FO0CH5 ; CALL Q0CH5 ; ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND5: ; ; MOVLW 0x34 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB4 ;RH1 LAYER CHANNEL 5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; CALL TUNE0CH1 ;SETS COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. CALL FO0CH1 ;FILTER FRQUENCY. CALL Q0CH1 ;CH1 Q. CALL PORTAMENTO_OFF15 ; ;CALL ALLNOTESOFFCH7 ; CALL CHORUS1CH1_OFF ; ; RETURN ; ;........................................................................................................................................................................................ RH1SOUND5L2: ; MOVLW d'25' ;Acoustic Guitar steel 26. MOVWF PROGCHHOLD2 ; MOVLW 0xC4 ;Ch5. MOVWF PROGCHHOLD1 ; CALL PROGCHNGSEND ;EXTRA RH1. LAYER. ; MOVLW 0x60 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR CHANNEL 1. MOVLW 0x60 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR CHANNEL 5. CALL SEND_EXPR ;SEND SOLO VALU ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x3E ;FINE TUNING IN CENTS.0x40=CENTRE. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; CALL ATAK0CH5 ; CALL FO0CH5 ; CALL Q0CH5 ; CALL VIBRATE0CH5 ; CALL VIBDEPTH0CH5 ; CALL VIBDELAY0CH5 ; ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND6: ;MUSETTE ACCORDION, 3 LAYERS. LAYER 1 IS TANGO ACCORDION. MOVLW 0x35 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB4 ;RH1 LAYER CHANNEL 5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; MOVLW 0xB6 ;RH1 LAYER CHANNEL 7. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x20 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;Fo MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x20 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x19 ;Fo. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;FINE TUNING IN CENTS. 0x40=CENTRE. MOVWF NORPNR7 ;0x7F=+100 & 0x00=-100. SO EACH UNIT = 1.5625 CENTS. CALL NORPN7BYTE ; ; ; CALL TUNE0CH1 ;SETS COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. ;CALL FO0CH1 ;FILTER FRQUENCY. ;CALL Q0CH1 ;CH1 Q. CALL PORTAMENTO_OFF15 ; ;CALL CHORUS1CH1_ON ; CALL CHORUS1CH1_OFF ; ; RETURN ; ;........................................................................................................................................................................................ RH1SOUND6L2: ; MOVLW d'22' ;HARMONICA 23.( FRENCH ACCORDION 22, TANGO ACCORDION 24). MOVWF PROGCHHOLD2 ; (ACTUAL VALUE IS ONE LESS). MOVLW 0xC4 ;Ch5. MOVWF PROGCHHOLD1 ; CALL PROGCHNGSEND ;EXTRA RH1. LAYER. ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x38 ;FINE TUNING IN CENTS. 0x40=CENTRE. (-13 CENTS). MOVWF NORPNR7 ;0x7F=+100 & 0x00=-100. SO EACH UNIT = 1.5625 CENTS. CALL NORPN7BYTE ; ; CALL FO0CH5 ; CALL Q0CH5 ; CALL VIBRATE0CH5 ; CALL VIBDEPTH0CH5 ; CALL VIBDELAY0CH5 ; ; MOVLW 0x68 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR CHANNEL 1. MOVLW 0x58 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR CHANNEL 5. MOVLW 0x58 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH7 ; SEND_EXPR CHANNEL 7. CALL SEND_EXPR ;SEND SOLO VALUE ;0x50 = 0.625 : 0x40= 0.5 : 0x30 = 0.375 : 0x20 = 0.25 : 0x10 = 0.125 : ;....................................................................................................................................................................................... RH1SOUND6L3: ; MOVLW d'22' ;HARMONICA 23. (FRENCH ACCORDION 22, TANGO ACCORDION 24). MOVWF PROGCHHOLD2 ; (ACTUAL VALUE IS ONE LESS). MOVLW 0xC6 ;Ch7. MOVWF PROGCHHOLD1 ; CALL PROGCHNGSEND ;EXTRA RH1. LAYER. ; MOVLW 0xB6 ;CONTROL CH5. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB6 ;CONTROL CH7. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x4A ;FINE TUNING IN CENTS. 0x40=CENTRE. +15 CENTS. MOVWF NORPNR7 ;0x7F=+100 & 0x00=-100. SO EACH UNIT = 1.5625 CENTS. CALL NORPN7BYTE ; ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND7: ; MOVLW 0x36 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB4 ;RH1 LAYER CHANNEL 5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x10 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;Fo MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x20 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x30 ;Fo. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; ; CALL TUNE0CH1,FAST ;SETS COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. ;CALL FO0CH1 ;FILTER FRQUENCY. ;CALL Q0CH1 ;CH1 Q. CALL PORTAMENTO_OFF15 ; ;CALL ALLNOTESOFFCH7 ; CALL CHORUS1CH1_OFF ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ; MOVLW 0x65 ;COARSE TUNNING IN SEMITONES. MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x02 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x34 ;Fo. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; RETURN ; ;........................................................................................................................................................................................ RH1SOUND7L2: ; MOVLW 0xC4 ;Ch5. MOVWF PROGCHHOLD1 ; MOVLW D'48' ;49 - STRING ENSEMBLE1. MOVWF PROGCHHOLD2 ; CALL PROGCHNGSEND ;EXTRA RH1. LAYER. ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x3F ;FINE TUNING IN CENTS.0x40=CENTRE. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB4 ;SENDS NRPN 0120=vvh MOVWF NORPNR1 ; (VALUE1)(VALUE2)=(VALUE). MOVLW 0x63 ;CONTROL #99. MOVWF NORPNR2 ; MOVLW 0x01 ;VALUE1. MOVWF NORPNR3 ; MOVLW 0x62 ;CONTROL #98. MOVWF NORPNR4 ; MOVLW 0x20 ;VALUE2 MOVWF NORPNR5 ; MOVLW 0x06 ;CONTROL #6. MOVWF NORPNR6 ; MOVLW 0x3C ;Fo DEFAULT. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ;FILTER RESONANCE TO DEFAULT VALUE. MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ;FILTER RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x10 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0x40 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR CHANNEL 1. MOVLW 0x74 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR CHANNEL 5. CALL SEND_EXPR ;SEND SOLO VALUE. ; CALL ATAK0CH5 ; CALL VIBRATE0CH5 ; CALL VIBDEPTH0CH5 ; CALL VIBDELAY0CH5 ; ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND8: ; MOVLW 0x6F ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR CHANNEL 1. MOVLW 0x40 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR CHANNEL 5. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; MOVLW 0x37 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ;MOVLW 0xB4 ;RH1 LAYER CHANNEL 5. ;MOVWF BYTE1OF3 ; ;CALL MIDI3BYTE ; ; CALL TUNE0CH1,FAST ;SETS COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. CALL FO0CH1 ;FILTER FRQUENCY. CALL Q0CH1 ;CH1 Q. CALL PORTAMENTO_OFF15 ; ;CALL ALLNOTESOFFCH7 ; CALL CHORUS1CH1_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND9: ; MOVLW 0x38 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB4 ;RH1 LAYER CHANNEL 5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x44 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0x6F ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR CHANNEL 1. MOVLW 0x6F ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR CHANNEL 5. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; CALL TUNE0CH1 ;SETS COARSE TUNNING TO DEFAULT. ;CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. CALL FO0CH1 ;FILTER FRQUENCY. CALL Q0CH1 ;CH1 Q. ;CALL ALLNOTESOFFCH7 ; CALL CHORUS1CH1_ON ; ; RETURN ; ;..................................................................................................................................................................................... RH1SOUND9L2: ; MOVLW d'109' ;BAGPIPES (110). MOVWF PROGCHHOLD2 ; (ACTUAL VALUE IS ONE LESS). MOVLW 0xC4 ;Ch5. MOVWF PROGCHHOLD1 ; CALL PROGCHNGSEND ;EXTRA RH1. LAYER. ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x3E ;FINE TUNING IN CENTS.0x40=CENTRE. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB6 ;CONTROL CH5. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x44 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; CALL FO0CH5 ; CALL Q0CH5 ; CALL VIBRATE0CH5 ; CALL VIBDEPTH0CH5 ; CALL VIBDELAY0CH5 ; ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND10: ; MOVLW 0x39 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB4 ;RH1 LAYER CHANNEL 5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB0 ;SENDS NRPN 010A=vvh MOVWF NORPNR1 ; (VALUE1)(VALUE2)=(VALUE). MOVLW 0x63 ;CONTROL #99. MOVWF NORPNR2 ; MOVLW 0x01 ;VALUE1. MOVWF NORPNR3 ; MOVLW 0x62 ;CONTROL #98. MOVWF NORPNR4 ; MOVLW 0x0A ;VALUE2 MOVWF NORPNR5 ; MOVLW 0x06 ;CONTROL #6. MOVWF NORPNR6 ; MOVLW 0x50 ;VIBRATO DELAY MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x09 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x41 ;VIBRATO DEPTH.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x46 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; CALL TUNE0CH1 ;SETS COARSE TUNNING TO DEFAULT. ; CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. CALL FO0CH1 ;FILTER FRQUENCY. CALL Q0CH1 ;CH1 Q. ;CALL ALLNOTESOFFCH7 ; CALL CHORUS1CH1_OFF ; ; RETURN ; ;........................................................................................................................................................................................ RH1SOUND10L2: ; MOVLW d'73' ;Flute 74. MOVWF PROGCHHOLD2 ; MOVLW 0xC4 ;Ch5. MOVWF PROGCHHOLD1 ; CALL PROGCHNGSEND ;EXTRA RH1. LAYER. ; MOVLW 0x6F ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR CHANNEL 1. MOVLW 0x68 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR CHANNEL 5. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x47 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x41 ;FINE TUNING IN CENTS.0x40=CENTRE. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB4 ;SENDS NRPN 010A=vvh MOVWF NORPNR1 ; (VALUE1)(VALUE2)=(VALUE). MOVLW 0x63 ;CONTROL #99. MOVWF NORPNR2 ; MOVLW 0x01 ;VALUE1. MOVWF NORPNR3 ; MOVLW 0x62 ;CONTROL #98. MOVWF NORPNR4 ; MOVLW 0x0A ;VALUE2 MOVWF NORPNR5 ; MOVLW 0x06 ;CONTROL #6. MOVWF NORPNR6 ; MOVLW 0x58 ;VIBRATO DELAY MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x09 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;VIBRATO DEPTH.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; CALL VIBRATE0CH5 ; CALL TUNE0CH5 ;SETS COARSE TUNNING TO DEFAULT. CALL FO0CH5 ;FILTER FRQUENCY. CALL Q0CH5 ;CH5 Q. ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND11: ; MOVLW 0x3A ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ;MOVLW 0xB4 ;RH1 LAYER CHANNEL 5. ;MOVWF BYTE1OF3 ; ;CALL MIDI3BYTE ; ; MOVLW 0x6F ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR CHANNEL 1. MOVLW 0x40 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR CHANNEL 5. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; CALL TUNE0CH1 ;SETS COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. CALL FO0CH1 ;FILTER FRQUENCY. CALL Q0CH1 ;CH1 Q. ;CALL ALLNOTESOFFCH7 ; CALL CHORUS1CH1_OFF ; ; RETURN ; ;................................................................................................................................................................................................................ RH1SOUND12: ; MOVLW 0x3B ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB0 ;RH1 CHANNEL 1. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; MOVLW 0xB4 ;RH1 LAYER CHANNEL 5. MOVWF BYTE1OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ; (VALUE1)(VALUE2)=(VALUE). MOVLW 0x63 ;CONTROL #99. MOVWF NORPNR2 ; MOVLW 0x01 ;VALUE1. MOVWF NORPNR3 ; MOVLW 0x62 ;CONTROL #98. MOVWF NORPNR4 ; MOVLW 0x20 ;VALUE2 MOVWF NORPNR5 ; MOVLW 0x06 ;CONTROL #6. MOVWF NORPNR6 ; MOVLW 0x28 ;Fo. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ;FILTER RESONANCE. MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;FILTER RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x01 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB0 ;CONTROL CH1. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x48 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; CALL TUNE0CH1 ;SETS COARSE TUNNING TO DEFAULT. ;CALL ATAKZEROCH1 ;CH1 ATACK TO DEFAULT. CALL DECAY0CH1 ;DECAY. ;CALL FO0CH1 ;FILTER FRQUENCY. ;CALL Q0CH1 ;CH1 Q. ;CALL ALLNOTESOFFCH7 ; CALL CHORUS1CH1_OFF ; ; RETURN ; ;........................................................................................................................................................................................ RH1SOUND12L2: ; MOVLW 0xC4 ;Ch5. MOVWF PROGCHHOLD1 ; MOVLW D'57' ;58 - TROMBONE. MOVWF PROGCHHOLD2 ; CALL PROGCHNGSEND ;EXTRA RH1. LAYER. ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x01 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x3F ;FINE TUNING IN CENTS.0x40=CENTRE. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB4 ;SENDS NRPN 0120=vvh MOVWF NORPNR1 ; (VALUE1)(VALUE2)=(VALUE). MOVLW 0x63 ;CONTROL #99. MOVWF NORPNR2 ; MOVLW 0x01 ;VALUE1. MOVWF NORPNR3 ; MOVLW 0x62 ;CONTROL #98. MOVWF NORPNR4 ; MOVLW 0x20 ;VALUE2 MOVWF NORPNR5 ; MOVLW 0x06 ;CONTROL #6. MOVWF NORPNR6 ; MOVLW 0x38 ;Fo DEFAULT. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB4 ;CONTROL CH5. MOVWF NORPNR1 ;FILTER RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x01 ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0x6F ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH1 ; SEND_EXPR CHANNEL 1. MOVLW 0x6F ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH5 ; SEND_EXPR CHANNEL 5. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; CALL ATAK0CH5 ; CALL VIBRATE0CH5 ; CALL VIBDEPTH0CH5 ; CALL VIBDELAY0CH5 ; CALL TUNE0CH5 ;SETS COARSE TUNNING TO DEFAULT. ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND1: ; MOVLW 0x3C ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x08 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x49 ;VIBRATO RATE.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x09 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x4A ;VIBRATO DEPTH.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; CALL VIBDELAY0CH4 ; ; MOVLW 0x60 ;CHORUS SEND LEVEL. MOVWF CHORUSENDLEV ; CALL CHORUS1CH4_ON ; MOVLW 0x3D ;SELECT CHORUS RATE. MOVWF SYSX11BYTE8 ; MOVLW 0x08 ;CHORUS RATE VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET CHORUS RATE. ; MOVLW 0x38 ; MOVWF SYSX11BYTE8 ; MOVLW 0x02 ;SET CHORUS TYPE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ; ; MOVLW 0x60 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; CALL TUNE0CH4 ;COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH4 ;CH4 ATTACK TO DEFAULT. CALL DECAY0CH4 ;DECAY TO DEFAULT. CALL PORTAMENTO_OFF4 ; CALL SEND_EXPR ;SEND SOLO VALUE. ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND2: ; MOVLW 0x3D ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; CALL VIBRATE0CH4 ;VIBRATO RATE TO DEFAULT. CALL VIBDELAY0CH4 ;VIBRATO DELAY TO DEFAULT. CALL VIBDEPTH0CH4 ;VIBRATO DEPTH TO DEFAULT. ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x20 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0x78 ;CHORUS SEND LEVEL. MOVWF CHORUSENDLEV ; CALL CHORUS1CH4_ON ; ; MOVLW 0x3D ;SELECT CHORUS RATE. MOVWF SYSX11BYTE8 ; MOVLW 0x00 ;CHORUS RATE VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET CHORUS RATE. ; MOVLW 0x38 ; MOVWF SYSX11BYTE8 ; MOVLW 0x00 ;SET CHORUS TYPE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ; ; MOVLW 0x60 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4 CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; CALL TUNE0CH4 ;COARSE TUNNING TO DEFAULT. CALL DECAY0CH4 ;DECAY TO DEFAULT. CALL PORTAMENTO_OFF4 ; ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND3: ; MOVLW 0x3E ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x60 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; ; CALL VIBRATE0CH4 ;VIBRATO RATE TO DEFAULT. CALL VIBDELAY0CH4 ;VIBRATO DELAY TO DEFAULT. CALL VIBDEPTH0CH4 ;VIBRATO DEPTH TO DEFAULT. CALL CHORUS1CH4_OFF ; CALL TUNE0CH4 ;COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH4 ; CALL DECAY0CH4 ;DECAY TO DEFAULT. CALL PORTAMENTO_OFF4 ; ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND4: ; MOVLW 0x3F ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x08 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x38 ;VIBRATO RATE.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x09 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x48 ;VIBRATO DEPTH.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x0A ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x60 ;VIBRATO DELAY.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x40 ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0x6F ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; ; CALL CHORUS1CH4_OFF ; CALL TUNE0CH4 ;COARSE TUNNING TO DEFAULT. ;CALL ATAKZEROCH4 ; CALL DECAY0CH4 ;DECAY TO DEFAULT. ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND5: ; MOVLW 0x40 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x7C ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; CALL VIBRATE0CH4 ;VIBRATO RATE TO DEFAULT. CALL VIBDELAY0CH4 ;VIBRATO DELAY TO DEFAULT. CALL VIBDEPTH0CH4 ;VIBRATO DEPTH TO DEFAULT. CALL CHORUS1CH4_OFF ; CALL TUNE0CH4 ;COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH4 ; CALL DECAY0CH4 ;DECAY TO DEFAULT. ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND6: ; MOVLW 0x41 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x78 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; CALL VIBRATE0CH4 ;VIBRATO RATE TO DEFAULT. CALL VIBDELAY0CH4 ;VIBRATO DELAY TO DEFAULT. CALL VIBDEPTH0CH4 ;VIBRATO DEPTH TO DEFAULT. CALL CHORUS1CH4_OFF ; CALL TUNE0CH4 ;COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH4 ; CALL DECAY0CH4 ;DECAY TO DEFAULT. ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND7: ; MOVLW 0x42 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; ; CALL VIBDELAY0CH4 ;VIBRATO DELAY TO DEFAULT. CALL TUNE0CH4 ;COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH4 ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ;DECAY TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x64 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x50 ;DECAY TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x08 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x49 ;VIBRATO RATE.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x09 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x4A ;VIBRATO DEPTH.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; CALL VIBDELAY0CH4 ; ;............... MOVLW 0x60 ;CHORUS SEND LEVEL. MOVWF CHORUSENDLEV ; CALL CHORUS1CH4_ON ; ; MOVLW 0x3D ;SELECT CHORUS RATE. MOVWF SYSX11BYTE8 ; MOVLW 0x08 ;CHORUS RATE VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET CHORUS RATE. ; MOVLW 0x38 ; MOVWF SYSX11BYTE8 ; MOVLW 0x02 ;SET CHORUS TYPE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ; ; MOVLW 0x68 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE ON CHS 1,4,5. ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND8: ; MOVLW 0x43 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; CALL VIBRATE0CH4 ;VIBRATO RATE TO DEFAULT. CALL VIBDELAY0CH4 ;VIBRATO DELAY TO DEFAULT. CALL VIBDEPTH0CH4 ;VIBRATO DEPTH TO DEFAULT. CALL CHORUS1CH4_OFF ; CALL TUNE0CH4 ;COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH4 ;CH4 ATTACK TO DEFAULT. CALL DECAY0CH4 ;DECAY TO DEFAULT. ; MOVLW 0x60 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND9: ; MOVLW 0x44 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x60 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; CALL VIBRATE0CH4 ;VIBRATO RATE TO DEFAULT. CALL VIBDELAY0CH4 ;VIBRATO DELAY TO DEFAULT. CALL VIBDEPTH0CH4 ;VIBRATO DEPTH TO DEFAULT. CALL CHORUS1CH4_OFF ; CALL TUNE0CH4 ;COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH4 ; CALL DECAY0CH4 ;DECAY TO DEFAULT. CALL PORTAMENTO_OFF4 ; ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND10: ; MOVLW 0x45 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x08 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x34 ;VIBRATO RATE.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x09 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x48 ;VIBRATO DEPTH.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x0A ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x50 ;VIBRATO DELAY.0x40=NO MOD. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x02 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x28 ;COARSE TUNNING.0x40=NO MOD. MOVWF NORPNR7 ;DOWN 2 OCTAVEs. CALL NORPN7BYTE ; ; MOVLW 0x60 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; CALL CHORUS1CH4_OFF ; CALL ATAKZEROCH4 ; CALL DECAY0CH4 ;DECAY TO DEFAULT. CALL PORTAMENTO_OFF4 ; ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND11: ; MOVLW 0x46 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x70 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; MOVLW 0xB3 ;CONTROL CH4. MOVWF NORPNR1 ; MOVLW 0x65 ; MOVWF NORPNR2 ; MOVLW 0x00 ; MOVWF NORPNR3 ; MOVLW 0x64 ; MOVWF NORPNR4 ; MOVLW 0x02 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVLW 0x28 ;COARSE TUNNING.0x40=NO MOD. MOVWF NORPNR7 ;DOWN 2 OCTAVEs. CALL NORPN7BYTE ; ; CALL VIBRATE0CH4 ;VIBRATO RATE TO DEFAULT. CALL VIBDELAY0CH4 ;VIBRATO DELAY TO DEFAULT. CALL VIBDEPTH0CH4 ;VIBRATO DEPTH TO DEFAULT. CALL CHORUS1CH4_OFF ; CALL ATAKZEROCH4 ; CALL DECAY0CH4 ;DECAY TO DEFAULT. ; RETURN ; ;................................................................................................................................................................................................................ RH2SOUND12: ; MOVLW 0x47 ;EEPROM Fx ADDRESS. MOVWF EEADR ; BCF EECON1, CFGS ; BCF EECON1, EEPGD ;SELECT DATA EEPROM MEMORY. BSF EECON1, RD ;ENABLE EEPROM READ. MOVF EEDATA, W ;VALUE IN W. MOVWF BYTE3OF3 ; MOVLW 0xB3 ;RH2 CHANNEL 4. MOVWF BYTE1OF3 ; MOVLW 0x5B ;REVERB SEND LEVEL=CONTROL 5B. MOVWF BYTE2OF3 ; CALL MIDI3BYTE ; ; MOVLW 0x78 ;INDIVIDUAL LEVEL CORRECTION SENT WITH MOVWF LEVEL_ADJ_CH4 ; SEND_EXPR CHANNEL 4. CALL SEND_EXPR ;SEND SOLO & EXPRESSION VALUE. ; CALL VIBRATE0CH4 ;VIBRATO RATE TO DEFAULT. CALL VIBDELAY0CH4 ;VIBRATO DELAY TO DEFAULT. CALL VIBDEPTH0CH4 ;VIBRATO DEPTH TO DEFAULT. CALL CHORUS1CH4_OFF ;CHORUS ON. CALL TUNE0CH4 ;COARSE TUNNING TO DEFAULT. CALL ATAKZEROCH4 ;ATTACK TO DEFAULT. CALL DECAY0CH4 ;DECAY TO DEFAULT. ; RETURN ; ;................................................................................................................................................................................................................ data "MP1v003a : software for PIC18F452 controlled ATSAM9773, " data "MIDI sound expander for WEM MP1 by Dick Straker, C 2002->2008." data "Supreme, I bow to thee : CKG/GIG." ;___________________________________________________________________________________________________________________________________________ ;*********************************************************************************************************************************************************************** SOUNDEDIT: ;RH1 VOL CONTROL IS ATTACK TIME. RH1 Fx CONTROL IS DECAY CONTROL. ;RH2 VOL CONTROL IS FILTER Q. RH2 Fx CONTROL IS FILTER Fo. RETURN ;............................................................................ MOVLW 0x31 ; MOVWF SYSX11BYTE8 ; MOVF BASSVOLPOT,W ; ;MOVLW 0x20 ;REVERB character VALUE. MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET REVERB character LEVEL. ;............................................................................ MOVLW 0x34 ; MOVWF SYSX11BYTE8 ; ;MOVLW 0x7F ;REVERB time VALUE. MOVF BASSFXPOT,W ; MOVWF SYSX11BYTE9 ; CALL SYSX11BYTE ;SET REVERB time LEVEL. RETURN ;........................................................................... MOVLW 0xB0 ;CONTROL CH. MOVWF NORPNR1 ;ATTACK TIME MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x63 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVF BASSVOLPOT,W ;ATTACK TIME.0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB0 ;CONTROL CH. MOVWF NORPNR1 ;RESONANCE MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x21 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVF CHORDVOLPOT,W ;RESONANCE. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB0 ;CONTROL CH. MOVWF NORPNR1 ;Fo MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x20 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVF CHORDFXPOT,W ;Fo. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; MOVLW 0xB0 ;CONTROL CH. MOVWF NORPNR1 ;DECAY MODIFY. MOVLW 0x63 ; MOVWF NORPNR2 ; MOVLW 0x01 ; MOVWF NORPNR3 ; MOVLW 0x62 ; MOVWF NORPNR4 ; MOVLW 0x64 ; MOVWF NORPNR5 ; MOVLW 0x06 ; MOVWF NORPNR6 ; MOVF BASSFXPOT,W ;DECAY. 0x40=NO MODIFY. MOVWF NORPNR7 ; CALL NORPN7BYTE ; ; RETURN ; ;................................................................................................................................................................................................................ ;---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- end ;_______________________________________________________________________________________________________________________