               INCLUDE HPFIXUPS
               TITLE "FOOTPADS"
***************************************************************************************************
***************************************************************************************************
***                                                                                             ***
***            FOOTPADS - FOOTSWITCH-GENERATED PAD-ON, PAD-OFF BACKGROUND HANDLERS              ***
***                                                                                             ***
***************************************************************************************************
***************************************************************************************************
;
NEG_EXT        EQU     0FFFFFF00H      ;USE IN MOVEQ INSTRUCTIONS WHERE ARG IS
                                       ;80H OR LARGER - HP XASM DOES NOT HANDLE
                                       ;SIGN-EXTEND CORRECTLY.  COSMETIC, KEEPS
                                       ;ACTUAL BYTE VALUE CLEARER.
;
               ABS_SHORT
;
               GLB     PRO_FTPADS_ON,PRO_FTPADS_OFF
               GLB     FTPADS_ON_BOY,FTPADS_OFF_BOY
               GLB     FTPAD_ON_AUTORPT,FTPAD_OFF_AUTORPT
;
               EXTERNAL  BACK_HANDLER
               EXTERNAL  VOICE_ASSIGN,VOICE_GATE_OFF
               EXTERNAL  XMIT_LIVE
               EXTERNAL  LOG_IN_NEW_PAD
               EXTERNAL  LOG_OUT_NEW_PAD
               EXTERNAL  FTSW_EVENT_ID_TBL
               EXTERNAL  PAD_VEL_TBL
;
               EXTERNAL  SAMPLED_SOUNDS
               EXTERNAL  PAD_LEVELS
               EXTERNAL  PAD_PITCHES
               EXTERNAL  PAD_PANS
               EXTERNAL  PAD_SOUNDS
               EXTERNAL  KIT_INDEX
               EXTERNAL  EDIT_KIT_INDEX
               EXTERNAL  BUILD_KIT_FLAG
               EXTERNAL  PAD_JUST_HIT
               EXTERNAL  RECORDING
               EXTERNAL  AUTORPT_FLAG
               EXTERNAL  ASSIGN_BLOCK
               EXTERNAL  CURRENT_SOUND
               EXTERNAL  LEVEL_CHANGE
               EXTERNAL  CURRENT_LEVEL
               EXTERNAL  PITCH_CHANGE
               EXTERNAL  CURRENT_PITCH
               EXTERNAL  PAN_CHANGE
               EXTERNAL  CURRENT_PAN
               EXTERNAL  SEQ_WR_PTR
;
;30SEP               EXTERNAL  WASTE_WR_PTR
;30SEP               EXTERNAL  PAD_REC_PARSE
;30SEP               EXTERNAL  NOTE_OFF_PARSE
               EXTERNAL  WASTELAND_PTR
               EXTERNAL  PAD_ON_WRITE
               EXTERNAL  NOTE_OFF_WRITE
;
               EXTERNAL  NOW_TRACK
               EXTERNAL  ERASING
               EXTERNAL  INT_ERASE_MAP
               EXTERNAL  NEW_FTPADS_ON
               EXTERNAL  CUR_FTPADS_ON
               EXTERNAL  AUTO_FTPADS_ON
               EXTERNAL  FTSW1_ACTION
               EXTERNAL  FTSW2_ACTION
               EXTERNAL  FTSW1_INDEX
               EXTERNAL  FTSW2_INDEX
               EXTERNAL  FTSW2_KIT
               EXTERNAL  FTSW2_ALT_PRM
               EXTERNAL  FTSW2_VELOCITY
               EXTERNAL  FTSW1_KIT
               EXTERNAL  FTSW1_ALT_PRM
               EXTERNAL  FTSW1_VELOCITY
               EXTERNAL  CURRENT_FOOTSW
               EXTERNAL  FTSW1_OLD_ALT
               EXTERNAL  FTSW2_OLD_ALT
               EXTERNAL  FTPAD_ERAS_BUF
               EXTERNAL  CUR_PADS_ON
               EXTERNAL  FTPAD_XMT_BUF
               EXTERNAL  FTPAD_SEQ_BUF
               SKIP
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; ENTRY POINT FOR RESPONSE TO FOOTSWITCH-GENERATED PAD EVENTS.
; WE CAME HERE BECAUSE ONE OR BOTH BITS WAS SET IN NEW_FTPADS_ON -
; ONE BIT WILL BE CLEARED BEFORE WE EXIT, PERHAPS ONE VOICE ASSIGNED.
; NO OTHER INPUTS - ASSUME ALL REGS DESTROYED TO AVOID DISAPPOINTMENT.
;
; TO AVOID CONFUSION:  IN PAD-FOOTSWITCH STATUS BIT MAPS, IT'S -
;       BIT 1 ---> FOOTSWITCH 1
;       BIT 0 ---> FOOTSWITCH 2
;
PRO_FTPADS_ON
               MOVEQ   #1,D0                ;FUST, WE GOTS TO FIND THE BITCH -
PRO_FPON_10
               BCLR    D0,NEW_FTPADS_ON     ;NOTE SIMULTANEOUS TEST AND CLEAR -
               DBNE    D0,PRO_FPON_10       ;LOOP IF THIS IS NOT IT - WE'LL FIND IT YET.
               BSR.S   FTPADS_ON_BOY        ;ELSE, GIVE IT TO THE BOY,
               BRA     BACK_HANDLER         ;GET BACK TO THE GROUND.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; AUTOREPEAT PAD-ON EVENT GENERATOR, FOOTSWITCH STYLE-Y -
; WE COME HERE AT JUST THAT CERTAIN TIME ....
; DETERMINE WHICH PAD-FOOTSWITCHES ARE ON BY LOOKING AT CUR_FTPADS_ON -
; SAVE BIT MAP IN AUTO_FTPADS_ON FOR USE BY FTPAD_OFF_AUTORPT.
; PASS THE PAD-ON BIT MAP THROUGH PAD-ON HANDLER TO MAKE THINGS HAPPEN.
;
; NOTE: SEQUENCE-ERASE AND AUTOREPEAT SHOULD NOT BE ALLOWED TO
; EXIST SIMULTANEOUSLY!
;
; TO AVOID CONFUSION:  IN PAD-FOOTSWITCH STATUS BIT MAPS, IT'S -
;       BIT 1 ---> FOOTSWITCH 1
;       BIT 0 ---> FOOTSWITCH 2
;
FTPAD_ON_AUTORPT
               TST.B   AUTORPT_FLAG         ;BUT - ARE WE IN AUTOREPEAT MODE?
               BEQ.S   FTPDONAUT_EXIT       ;EXIT IF NOT - WHAT ARE WE DOING HERE?
;
               MOVE.B  CUR_FTPADS_ON,D1     ;FETCH MAP OF CURRENTLY-ON PAD-FOOTSWITCHES,
               MOVE.B  D1,AUTO_FTPADS_ON    ;COPY IT FOR USE BY AUTOREPEAT "OFF" DUDE -
               BEQ.S   FTPDONAUT_EXIT       ;EXIT IF NONE ARE ON.
;
               MOVEQ   #1,D0                ;PAD(S) ON - PASS (ONE AT A TIME) TO PAD-ON HANDLER.
FTPDONAUT_30
               BTST    D0,D1                ;THIS ONE ON?
               BEQ.S   FTPDONAUT_40         ;SKIP AHAID IF NOT -
               MOVEM   D0-D1,-(A7)          ;ELSE REMEMBER WHERE WE ARE,
               BSR.S   FTPADS_ON_BOY        ;WAKE UP BOY,
               MOVEM   (A7)+,D0-D1          ;RECALL OUR POSITION.
FTPDONAUT_40
               DBRA    D0,FTPDONAUT_30      ;LOOPUNTILWELOOKEDATALLFOOTSWITCHES.
;
FTPDONAUT_EXIT
               RTS                          ;NOWEBEGON.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
               SKIP
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; HANDS-ON, DUMBFUCK PAD-ON HANDLER - FOOTSWITCH STYLE-Y ....
; FOOTSWITCH INDEX IS IN D0, PRESENTED BY EITHER NORMAL FOOTSWITCH
; PAD-ON DUDE OR HIS AUTOREPEAT-TYPE CO-DUDE.
; WE ALSO CALL HERE WHEN ERASE MODE COMES ON, TO DEAL WITH FOOTSWITCH
; PADS THAT ARE BEING HELD DOWN PRIOR TO ERASE PUNCH-IN (FOR THOSE
; DIFFICULT-TO-HIT EVENTS ON THE FIRST DOWNBEAT).
; NOTE!! IF AUTOREPEATING, DON'T BE ERASING, AND VICE-VERSA ....
; EXPECT PRACTICALLY ALL REGISTERS DESTROYED -
; MAYBE SOMEDAY I'LL GET MORE SPECIFIC ABOUT THIS.
;
;   NOTE - THE FOLLOWING MAY APPLY HERE, BUT DON'T BET YOUR NOSE ON IT:
;18NOV; WELL! - IF IN ERASE MODE, EXPECT TO LOSE D1-D3/A0.
;18NOV; IF NOT, KISS OFF D1-D7/A0-A2 - AND A LOT MORE TIME, TO BOOT.
;   YOU'D LOOK PRETTY FUNNY WITH A BIG HOLE IN THE MIDDLE OF YOUR FACE.
;
; AWRIGHT - IF IN ERASE MODE, YOU LOSE D0-D4/A0 AND D7.
; IF NOT, WE'RE TALKING D0-D7/A0-A2 AT LEAST, PLUS ANYTHING SPLATTER'D
; BY RECORDING PROCESSES IF IN RECORD MODE.
;
FTPADS_ON_BOY
               TST     D0                   ;FIRST, WE NEED A "PAD" INDEX -
               BNE.S   FTPD_ON_10           ;BRANCH IF DOING FOOTSWITCH 1 PAD EVENT.
               ST      CURRENT_FOOTSW       ;FOOTSWITCH 2, SET OUR INDICATOR.
               MOVE    FTSW2_ACTION,D0      ;THIS INDICATES THE PAD WE POSE AS FOR THIS EVENT -
               MOVE    FTSW2_KIT,D1         ;THIS INDICATES KIT PREFERENCE (PERHAPS NONE).
               MOVE    FTSW2_ALT_PRM,D7     ;FETCH SPECIFIED ALT-PARAMS SETTING, IF ANY -
               MOVE    FTSW2_VELOCITY,D4    ;FETCH NOTE-ON VELOCITY SETTING FOR THIS FOOTSWITCH.
               MOVE    #-1,FTSW2_INDEX      ;UNTIL FURTHER NOTICE, NO ALT-PARAMS REPLACEMENT.
               BRA.S   FTPD_ON_20
FTPD_ON_10
               SF      CURRENT_FOOTSW       ;FOOTSWITCH 1, SET OUR INDICATOR.
               MOVE    FTSW1_ACTION,D0      ;THIS INDICATES THE PAD WE POSE AS FOR THIS EVENT -
               MOVE    FTSW1_KIT,D1         ;THIS INDICATES KIT PREFERENCE (PERHAPS NONE).
               MOVE    FTSW1_ALT_PRM,D7     ;FETCH SPECIFIED ALT-PARAMS SETTING, IF ANY -
               MOVE    FTSW1_VELOCITY,D4    ;FETCH NOTE-ON VELOCITY SETTING FOR THIS FOOTSWITCH.
               MOVE    #-1,FTSW1_INDEX      ;UNTIL FURTHER NOTICE, NO ALT-PARAMS REPLACEMENT.
;
FTPD_ON_20
               SUB     #38,D0               ;CONVERT FOOTSWITCH ACTION INDEX TO PAD INDEX (0-7),
               MOVE    D0,PAD_JUST_HIT      ;UPDATE PAD-JUST-HIT STATUS PER PAD WE'RE MAPPED TO.
               TST     D1                   ;IS A KIT SPECIFIED FOR THIS FOOT-PAD?
               BEQ.S   FTPD_ON_22           ;BRANCH IF NOT, USE WHATEVER IS CURRENTLY SELECTED.
               SUBQ    #1,D1                ;ELSE ADJUST SETTING TO OBTAIN EFFECTIVE KIT INDEX.
               BRA.S   FTPD_ON_24
FTPD_ON_22
               MOVE    KIT_INDEX,D1         ;GENERATE PAD PARAMETER INDEX FOR THIS EVENT -
               TST.B   BUILD_KIT_FLAG       ;ARE WE IN KIT-BUILD SCREEN?
               BEQ.S   FTPD_ON_24           ;BRANCH IF NOT, PLAY/EDIT SELECTED LIVE PAD ARRAY.
               MOVE    EDIT_KIT_INDEX,D1    ;KIT-BUILD - PLAY/EDIT EDIT-TARGET KIT (DISPLAYED KIT).
FTPD_ON_24
                                            ;D1 CONTAINS EVENT EFFECTIVE KIT INDEX -
               MOVE    D1,EDIT_KIT_INDEX    ;EDIT KIT FOLLOWS LIVE EVENT SOURCE KIT, UPDATE INDEX.
               TST.B   BUILD_KIT_FLAG       ;ARE WE IN KIT-BUILD SCREEN?
               BEQ.S   FTPD_ON_2A           ;BRANCH IF NOT, PLAY FROM LIVE PAD ARRAYS.
;
;22NOV               CMP     EDIT_KIT_INDEX,D1    ;IF YES, ARE WE PLAYING FROM THE CURRENT EDIT KIT?
;22NOV               BNE.S   FTPD_ON_2A           ;AGAIN, PLAY FROM LIVE PAD ARRAYS IF NOT.
;
               ADD     #32,D1               ;ELSE ADD OFFSET SO WE ACCESS PRESET ARRAYS INSTEAD.
FTPD_ON_2A
               ASL     #3,D1                ;(8*KIT_INDEX) GETS SELECTED PAD/KIT ARRAY,
               ADD     D0,D1                ;STEP UP BY PAD NUMBER TO GET SELECTED PAD'S CELL.
               MOVE    D1,A0                ;A0 IS NOW THE PAD PARAMETER INDEX -
               CLR     D1                   ;CLEAR OUT D1 (ESPECIALLY HIGH BYTE),
               MOVE.B  PAD_SOUNDS(A0),D1    ;FETCH SOUND NUMBER (L.S.BIT = ALT PARAMS SETTING).
;
               MOVE    D1,D2                ;PRESERVE SOUND NUMBER / ALT PARAM BIT IN D1,
               MOVE    D1,D3                ;SPLIT SOUND NUMBER AND ALT PARAMS BIT FROM EACH OTHER,
               LSR     #1,D2                ;UPDATE CURRENT_SOUND - NO QUESTION HERE.
               MOVE    D2,CURRENT_SOUND
               AND     #1,D3                ;ISOLATE ALT-PARAMS SETTING -
               TST.B   CURRENT_FOOTSW       ;SAVE FETCHED SETTING FOR RESTORE AT "OFF" OR FOR ERASE
               BNE.S   FTPD_ON_2C           ;PUNCH-IN - BRANCH TO SAVE IN FOOTSWITCH 2 PARAMETER,
               MOVE    D3,FTSW1_OLD_ALT     ;ELSE SAVE IN FOOTSWITCH 1 PARAMETER.
               BRA.S   FTPD_ON_2E           ;GO TRANSFER SETTING AND USE IT TO EDIT ARRAY.
FTPD_ON_2C
               MOVE    D3,FTSW2_OLD_ALT
FTPD_ON_2E
               TST     D7                   ;WHAT IS ALT-PARAMS SETTING ON OUR FOOTSWITCH?
               BEQ.S   FTPD_ON_2G           ;NONE SPECIFIED, USE THE ONE WE FETCHED FROM ARRAY.
               SUBQ    #1,D7                ;ELSE, SUBSTITUTE - CHOP DOWN TO WORKING VALUE,
               MOVE    D7,D3                ;DROP IT INTO THE WORK-HOLE.
               BCLR    #0,D1                ;ALSO, UPDATE D1 (USED FOR EVENT-BUILDING BELOW),
               OR.B    D3,D1
               MOVE.B  D1,PAD_SOUNDS(A0)    ;AND UPDATE EFFECTIVE SOUND/ALT-PARAM ARRAY CELL.
               TST.B   CURRENT_FOOTSW       ;SAVE ARRAY INDEX FOR PARAMETER RESTORE AT SWITCH-OFF.
               BNE.S   FTPD_ON_2F
               MOVE    A0,FTSW1_INDEX
               BRA.S   FTPD_ON_2G
FTPD_ON_2F
               MOVE    A0,FTSW2_INDEX
FTPD_ON_2G
;
;22NOV               TST.B   BUILD_KIT_FLAG       ;ARE WE IN KIT-BUILD SCREEN?
;22NOV               BEQ.S   FTPD_ON_2GA          ;IF NOT, OK TO UPDATE ALT_PARAM_FLAG AND PAD_JUST_HIT -
;22NOV               CMP     EDIT_KIT_INDEX,D5    ;YES - UPDATE ONLY IF PLAYING FROM CURRENT EDIT KIT.
;22NOV               BNE.S   FTPD_ON_2GB
;22NOVFTPD_ON_2GA
;22NOV               MOVE    D3,ALT_PARAM_FLAG    ;UPDATE ALT_PARAM_FLAG STATUS, LED WILL ECHO CHANGE.
;22NOV               MOVE    D0,PAD_JUST_HIT      ;UPDATE PAD-JUST-HIT STATUS PER PAD WE'RE MAPPED TO.
;22NOV
;22NOVFTPD_ON_2GB
;22NOV
;
               TST.B   ERASING              ;ARE WE IN ERASE MODE?
               BEQ.S   FTPD_ON_30           ;BRANCH IF NOT, PROCEED WITH NORMAL EVENT PROCESSING.
               MOVE    #FTPAD_ERAS_BUF,A0   ;ELSE STORE SOUND # / ALT BIT IN FOOTSW-PAD ERASE BUF.
               TST.B   CURRENT_FOOTSW       ;WHICH FOOTSWITCH, AGAIN?
               BEQ.S   FTPD_ON_2H           ;BRANCH FOR FOOTSWITCH 1,
               ADDQ    #1,A0                ;BUMP POINTER UP FOR FOOTSWITCH 2.
FTPD_ON_2H
               MOVE.B  D1,(A0)              ;THIS DATA WILL BE RETRIEVED AT FOOTSWTICH-OFF.
               BTST    #0,D1                ;IS ALT PARAMS BIT SET FOR THIS PAD?
               BNE.S   FTPD_ON_2K           ;BRANCH IF YES, EDIT ERASE-MAP UPPER LONG-WORD.
               MOVE.L  INT_ERASE_MAP,D3     ;ELSE EDIT LOWER LONG-WORD.
               BSET    D2,D3                ;SET BIT CORRESPONDING TO SOUND NUMBER (SANS ALT BIT).
               MOVE.L  D3,INT_ERASE_MAP
               BRA     FTPD_ON_EXIT         ;THAT'S ALL WE DO DURING ERASE.
FTPD_ON_2K
               MOVE.L  INT_ERASE_MAP+4,D3   ;FOR ALT-PARAMS SOUNDS, EDIT UPPER LONG-WORD.
               BSET    D2,D3                ;SET BIT CORRESPONDING TO SOUND NUMBER (SANS ALT BIT).
               MOVE.L  D3,INT_ERASE_MAP+4
               BRA     FTPD_ON_EXIT         ;THAT'S ALL WE DO DURING THE RACE.
;
FTPD_ON_30
;
; LOOK FOR AND EXECUTE ANY PENDING PERFORMANCE PARAMETER EDITS:
; NORMALLY, EDITS REMAIN PENDING UNTIL PAD IS HIT, THEN ARE APPLIED TO
; THAT PAD BY THE FOLLOWING CODE (LIVE PAD ARRAYS ONLY).
;
; THE FOLLOWING CONDITIONS PREEMPT PAD-HANDLER EDITS - EDITS ARE
; INSTEAD GRABBED BY BACKGROUND (PAD_EDIT_CHECK), WE NEVER SEE 'EM:
;
; IF IN KIT-BUILD SCREEN, EDITS ARE IMMEDIATELY APPLIED TO LAST PAD HIT,
; IN PRESET ARRAYS OF THE EDIT-TARGET KIT (EDIT_KIT_INDEX) RATHER THAN
; THE KIT INDICATED BY KIT_INDEX.
;
; IF IN INITIAL PAN SCREEN, PAN CHANGES (ONLY) ARE HANDLED IMMEDIATELY,
; IN ARRAYS INDICATED BY KIT_INDEX (LIVE ARRAYS ONLY).
;
; IF NEITHER OF ABOVE CONDITIONS OBTAINS BUT PAD(S) ARE ON WHEN AN EDIT
; IS GENERATED, THE EDIT IS APPLIED IMMEDIATELY TO THOSE PADS, IN ARRAYS
; INDICATED BY KIT_INDEX (AGAIN, LIVE ARRAYS ONLY) - THIS INCLUDES ANY
; FOOTSWITCHES WHICH ARE SET UP AS PAD TRIGGERS.
;
; IN SUMMARY - EDITS DONE HERE ONLY IF NOT IN KIT-BUILD SCREEN/MODE AND
; NO OTHER PADS (OR PAD-FOOTSWITCHES) ARE ON AT THIS TIME.
;
               TST.B   BUILD_KIT_FLAG       ;JUST TO MAKE SURE NOTHING SLIPS THROUGH THE CRACKS ...
               BNE.S   FTPD_ON_80           ;SKIP EDIT TESTS IF IN KIT-BUILD SCREEN.
               MOVE.B  CUR_FTPADS_ON,D7     ;DEFER EDITS TO PAD_EDIT_CHECK IF MULTIPLE PADS ON -
               TST.B   CURRENT_FOOTSW       ;THIS IS MAINLY TO GUARANTEE CONSISTENT EDIT ACTION
               BNE.S   FTPD_ON_32           ;WHILE IN AUTOREPEAT MODE - DON'T WANT ONE PAD TO GRAB
               BCLR    #1,D7                ;THE EDIT IF MULTIPLE PADS ARE BEING AUTOREPEATED.
               BRA.S   FTPD_ON_34
FTPD_ON_32
               BCLR    #0,D7
FTPD_ON_34
               OR.B    CUR_PADS_ON,D7       ;SURVEY PADS AND PAD-FOOTSWITCHES OTHER THAN OURSELF -
               BNE.S   FTPD_ON_80           ;SKIP IF WE'RE NOT THE ONLY BIT IN TOWN.
;
                                            ;ELSE, PERFORM ANY PENDING EDITS:
;
;22NOV                                            ;D5 CONTAINS EVENT EFFECTIVE KIT INDEX.
;22NOV               BSR.S   FOOTPAD_EDIT         ;FIRST - DO EDITS IN THE INDEXED LIVE ARRAYS.
;22NOV               CMP     #4,D5                ;NOW - ARE WE DEALING WITH A BANK ARRAY?
;22NOV               BLT.S   FTPD_ON_60           ;BRANCH IF NOT - CLEAR EDIT FLAGS AND FORGE FORWARD.
;22NOV               ADD     #256,A0              ;ELSE, EDIT BANK PRESET ARRAYS ALSO.
;22NOV               BSR.S   FOOTPAD_EDIT
;22NOV               SUB     #256,A0              ;RESTORE PAD ARRAY INDEX, PROCEED.
;22NOV               BRA.S   FTPD_ON_60
;
;
FOOTPAD_EDIT
               TST.B   LEVEL_CHANGE         ;SOUND LEVEL -
               BEQ.S   FTPAD_ED_10
               MOVE.B  CURRENT_LEVEL+1,PAD_LEVELS(A0)
FTPAD_ED_10
               TST.B   PITCH_CHANGE         ;SOUND PITCH -
               BEQ.S   FTPAD_ED_20
               MOVE.B  CURRENT_PITCH+1,PAD_PITCHES(A0)
FTPAD_ED_20
               TST.B   PAN_CHANGE           ;SOUND PAN -
               BEQ.S   FTPAD_ED_30
               MOVE.B  CURRENT_PAN+1,PAD_PANS(A0)
FTPAD_ED_30
;
;22NOV
;22NOV               RTS
;22NOV
;
;
;
FTPD_ON_60
               SF      LEVEL_CHANGE         ;ACKNOWLEDGE ANY AND ALL PERFORMANCE PARAMETER EDITS.
               SF      PITCH_CHANGE
               SF      PAN_CHANGE
;
;
;
; VOICE-ASSIGN TIME -
; V_IDENTITY MINI-REFRESHER COURSE:
;
;                      BIT 15                       BIT 0
;                        |                             |
;                        V                             V
; FOOTSWITCH "PAD" EVENT V_IDENTITY:
;              WORD 0 -  1 G 0 0 0 0 0 0 0 0 0 0 0 0 0 0
;              WORD 2 -  0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 F
;
;                   G = GATE STATUS BIT.
;                   F = 0 FOR FOOTSWITCH 1 "PAD" EVENT,
;                       1 FOR FOOTSWITCH 2 "PAD" EVENT.
;
;
FTPD_ON_80
               MOVE.L  SAMPLED_SOUNDS,D7    ;DONE DIDDLING PADS - IS THIS SOUND SAMPLED?
               BTST    D2,D7
               BEQ.S   FTPD_ON_A0           ;BRANCH IF NOT - DON'T BOTHER MR.VOICE_ASSIGN.
;
                                            ;ELSE, SET UP ASSIGN_BLOCK FOR HIM TO CHEW ON -
               MOVE    #2,ASSIGN_BLOCK+0    ;SET ORIGIN CODE TO IDENTIFY THIS AS A PAD EVENT.
               MOVE    D2,ASSIGN_BLOCK+2    ;INSTALL SOUND NUMBER FOR THIS EVENT.
               MOVE    D3,ASSIGN_BLOCK+4    ;INSTALL ALT PARAMS STATUS FOR THIS EVENT.
               MOVE    D4,D5                ;COPY EVENT VELOCITY (MIDI FORMAT, 1-127).
               SUBQ    #1,D5                ;CONVERT TO VELOCITY TABLE INDEX (0-126).
               MOVE.L  #PAD_VEL_TBL,A1      ;SET POINTER TO TABLE,
               MOVE.B  0(A1,D5),D5          ;NOW FETCH DOT VALOSSIDY (1-31, INTERNAL FORMAT).
               MOVE.B  D5,ASSIGN_BLOCK+6    ;COPY VELOCITY INTO ASSIGN_BLOCK.
               MOVE.B  PAD_PITCHES(A0),ASSIGN_BLOCK+7 ;INSTALL PERFORMANCE PARAMETERS.
               MOVE.B  PAD_LEVELS(A0),ASSIGN_BLOCK+9
               MOVE.B  PAD_PANS(A0),ASSIGN_BLOCK+11
               MOVE    D0,ASSIGN_BLOCK+12   ;INSTALL PAD NUMBER.
               TST.B   CURRENT_FOOTSW       ;FETCH THE VOICE ID TAG THAT GOES WITH THIS FOOTSWITCH.
               BNE.S   FTPD_ON_84           ;BRANCH FOR FOOTSWITCH 2.
               MOVE.L  FTSW_EVENT_ID_TBL,D5 ;FOOTSWITCH 1 VOICE ID TAG.
               BRA.S   FTPD_ON_86
FTPD_ON_84
               MOVE.L  FTSW_EVENT_ID_TBL+4,D5    ;FOOTSWITCH 2 VOICE ID TAG.
FTPD_ON_86
               MOVE.L  D5,ASSIGN_BLOCK+14   ;COPY VOICE ID TAG INTO ASSIGN_BLOCK.
               BSR     VOICE_ASSIGN         ;ASSIGN_BLOCK IS COMPLETELY SET UP -
                                            ;GET VOICE PLAY UNDERWAY.
;
;
FTPD_ON_A0
;
; AT THIS POINT:
;    D0 CONTAINS EVENT PAD NUMBER.
;    D1 CONTAINS EVENT COMBINED SOUND NUMBER / ALT PARAMS BIT.
;    D2 CONTAINS EVENT SOUND NUMBER.
;    D3 CONTAINS EVENT ALT PARAMS BIT.
;    D4 CONTAINS EVENT NOTE-ON VELOCITY (MIDI FORMAT).
;    D7 CONTAINS SAMPLED_SOUNDS MAP.
;    A0 IS PAD/KIT ARRAY INDEX FOR FURTHER ACCESS TO PERFORMANCE PARAMS.
; FOR WHAT IT'S WORTH .....
;
;
;
; SO - IT BE TIME TO KICK DON MIDI AND SIR MTC IN THE BUTT -
; UNLIKE REAL PADS, WE HAVE EVENT VELOCITY RIGHT NOW, SO WE TRANSMIT
; EVENTS TO HANDLERS AS SOON AS WE CONSTRUCT THEM -
; EVENTS ARE BUILT AND BUFFERED AS NOTE-OFF EVENTS, THEN LOADED INTO
; REGISTERS AND MODIFIED INTO NOTE-ON EVENTS FOR TRANSMISSION.
;
               MOVE    #FTPAD_XMT_BUF,A2    ;A2 POINTS TO ARRAY WHICH HOLDS FOOTSWITCH-PAD EVENTS
               CLR     D5                   ;IN XMIT_LIVE FORMAT, FOR USE BY FOOTPADS_OFF -
               TST.B   CURRENT_FOOTSW       ;INDEX ON FOOTSWITCH NUMBER INTO EVENT BUFFER.
               BEQ.S   FTPD_ON_A4           ;BRANCH IF FOOTSWITCH 1,
               ADDQ    #8,D5                ;BUMP UP FOR FOOTSWITCH 2.
FTPD_ON_A4
               ADD     D5,A2                ;POINT TO APPROPRIATE 8-BYTE CELL IN ARRAY -
                                            ;D5 SAVED FOR (POSSIBLE) USE BELOW - SEQ EVENT GEN.
;
               MOVE    D0,(A2)+             ;STORE EVENT PAD NUMBER.
               MOVE    D1,(A2)+             ;STORE EVENT COMBINED SOUND NUMBER / ALT PARAMS BIT.
               MOVE.B  D4,(A2)+             ;STORE EVENT VELOCITY.
               MOVE.B  PAD_PITCHES(A0),(A2)+     ;STORE EVENT PITCH SETTING.
               MOVE.B  PAD_PANS(A0),(A2)+   ;STORE EVENT PAN SETTING.
               MOVE.B  PAD_LEVELS(A0),(A2)  ;STORE EVENT LEVEL SETTING.
;
;
;
; THE FOLLOWING PROCEDURE IS ANALOGOUS TO THE ABOVE,
; BUT APPLIES TO GENERATION OF EVENT FOR THE SEQUENCER?  YEAH - THAT'S
; IT - IN MOST RESPECTS SIMILAR TO THE ABOVE MIDI/MTC DEAL.
; BUFFERED EVENT IS RE-USED AT PAD-FOOTSWITCH "OFF" TIME.
; OF COURSE, DOESN'T HAPPEN IF WE ARE NOT IN NORMAL RECORD MODE.
;
; SEQUENCER FORMAT FOR INTERNAL NOTE-ON EVENT:
;              WORD 0 -  P-P-P S-S-S-S-S A T-T-T 0 0 0 1
;              WORD 1 -  X H-H-H-H-H N-N-N-N-N V-V-V-V-V
;              WORD 2 -  X X X X X X X X X X X L-L-L-L-L
;
; SEQUENCER FORMAT FOR INTERNAL NOTE-OFF EVENT:
;              WORD 0 -  P-P-P S-S-S-S-S A T-T-T 0 0 1 0
;              WORD 1 -  X H-H-H-H-H N-N-N-N-N V-V-V-V-V
;
;                   G = GATE STATUS BIT.
;                   P-P-P = PAD NUMBER.
;                   S-S-S-S-S = SOUND NUMBER.
;                   A = ALT-PARAMS STATUS.
;                   T-T-T = TRACK NUMBER.
;                   H-H-H-H-H = EVENT PITCH.
;                   N-N-N-N-N = EVENT PAN.
;                   V-V-V-V-V = EVENT VELOCITY.
;                   X = UNDEFINED.
;                   L-L-L-L-L = EVENT LEVEL.
;
;
               TST.B   RECORDING            ;ARE WE IN NORMAL-KINDA SEQUENCE-RECORD MODE?
               BEQ.S   FTPD_ON_B0           ;BRANCH IF NOT - DON'T BOTHER GENERATING SEQ EVENT.
                                            ;ELSE, GENERATE AN EVENT FOR SEQUENCER -
               MOVE    #FTPAD_SEQ_BUF,A2    ;SET POINTER TO ARRAY OF FOOTPAD-GENERATED SEQ EVENTS.
               ADD     D5,A2                ;OFFSET INTO ARRAY, 8 BYTES PER FOOTSWITCH NUMBER -
                                            ;FOR STREAMLINING, EVEN THOUGH WE ONLY NEED 6 BYTES.
                                            ;(D5 = 0 OR 8, PER FOOTSW - FROM MIDI EVENT GEN ABOVE).
               MOVE    D0,D6                ;COPY PAD NUMBER FOR EVENT GENERATION.
               MOVE    D5,D0                ;SAVE ARRAY OFFSET, WE'LL NEED IT FOR EVENT TRANSMIT.
               MOVE    D6,D5                ;PAD NUMBER AGAIN - BUILD EVENT IN D5-D7.
               LSL     #6,D5                ;SHIFT PAD NUMBER OVER, MAKE ROOM FOR SOUND#/ALT BIT.
               OR      D1,D5                ;THERE IT GOES.
               LSL     #3,D5                ;STEP ASIDE, MAKE WAY FER TRACK NUMMA -
               OR      NOW_TRACK,D5
               LSL     #4,D5                ;NOW MAKE WAY FOR NOTE-ON EVENT ID -
               BSET    #0,D5                ;EVENT ID = 0001 FOR INTERNAL NOTE-ON EVENT.
               CLR     D6                   ;BUILD PITCH/PAN/VELOCITY WORD IN D6:
               MOVE.B  PAD_PITCHES(A0),D6   ;PITCH GOES IN LEFTMOST,
               LSL     #5,D6
               OR.B    PAD_PANS(A0),D6      ;FOLLOWED BY PAN -
               LSL     #5,D6
               SUBQ    #1,D4                ;CONVERT MIDI VELOCITY TO VEL-TABLE INDEX (0-126).
               MOVE.L  #PAD_VEL_TBL,A1      ;SET POINTER TO TABLE,
               MOVE.B  0(A1,D4),D4          ;NOW FETCH DOT VALOSSIDY (1-31, INTERNAL FORMAT),
               OR      D4,D6                ;DROPPIT INTO SLOTT.
               CLR     D7                   ;EVENT LEVEL IS DANGLING OFF IN A WORD OF ITS OWN ....
               MOVE.B  PAD_LEVELS(A0),D7
               MOVEM   D5-D7,(A2)           ;DONE - PUMP 'EM ALL OUT THERE (PAD SEQ EVENT ARRAY).
               MOVE    D0,D5                ;NOW PUT EVENT BUFFER OFFSET BACK INTO D5.
;
FTPD_ON_B0
               BSR     FTPAD_XMT_BOY        ;TRANSMIT EVENT TO MIDI/MTC HANDLER, ALSO TO SEQUENCER
                                            ;IF IN SEQUENCE RECORD MODE - D5 INDICATES WHICH EVENT.
;
FTPD_ON_EXIT
               RTS
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
               SKIP
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; FOOTSWITCH PAD-OFF EVENT HANDLER - NON-AUTOREPEAT MODE.
; D4.B CONTAINS BIT-MAP OF PAD-FOOTSWITCHES NEEDING PAD-OFF SERVICING -
; HANDLES ALL OF 'EM ON A SINGLE PASS THROUGH.
;
; TO AVOID CONFUSION:  IN PAD-FOOTSWITCH STATUS BIT MAPS, IT'S -
;       BIT 1 ---> FOOTSWITCH 1
;       BIT 0 ---> FOOTSWITCH 2
;
; NO BIT FLAGS CLEARED HERE - SOMEONE ELSE'S JOB, MAN.
;
; EXCEPT WHEN IN SEQUENCE-ERASE MODE:
; BLINDLY ASSUMES THAT EACH PAD-ON PLAYED A VOICE, TRIES TO GATE IT OFF.
; PASSES EVENTS TO MIDI/MTC TRANSMIT ROUTINE - IF IN NORMAL RECORD MODE,
; PASSES EVENTS TO SEQUENCER RECORD INPUT PROCESS AS WELL.
;
PRO_FTPADS_OFF
               BSR.S   FTPADS_OFF_BOY       ;HAND THIS TO THE BOY,
               BRA     BACK_HANDLER         ;GET BACK HOME.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; AUTOREPEAT PAD-OFF HANDLER - FOOTSWITCH STYLE-Y ....
; JUST CALL HERE WHEN IT'S TIME.
;
; TO AVOID CONFUSION:  IN PAD-FOOTSWITCH STATUS BIT MAPS, IT'S -
;       BIT 1 ---> FOOTSWITCH 1
;       BIT 0 ---> FOOTSWITCH 2
;
; NOTE: SEQUENCE-ERASE AND AUTOREPEAT SHOULD NOT BE ALLOWED TO
; EXIST SIMULTANEOUSLY!
;
FTPAD_OFF_AUTORPT
               MOVE.B  AUTO_FTPADS_ON,D4    ;ANY AUTOREPEAT-PLAYED PAD-FOOTSWITCHES ON?
               BEQ.S   FTPDOFAUT_EXIT       ;RETURN ASAP IF NOT,
               SF      AUTO_FTPADS_ON       ;ELSE ACKNOWLEDGE THEM HERE,
               BSR.S   FTPADS_OFF_BOY       ;HAND 'EM "OFF" TO "BOY."
FTPDOFAUT_EXIT
               RTS
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
               SKIP
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; HANDS-ON, DIM-BULB PAD-OFF HANDLER - IN THE FOOTSWITCH-PAD WAY ....
; AUTOREPEAT COMES HERE FOR PAD-OFF PROCESSING VIA FTPAD_OFF_AUTORPT,
; NORMAL MODE FOOTSWITCH PAD-OFF GETS HERE VIA PRO_FTPADS_OFF.
;
; D4.B CONTAINS BIT-MAP OF FOOTSWITCHES NEEDING PAD-OFF SERVICING -
; HANDLES ALL OF 'EM ON A SINGLE PASS THROUGH.
;
; NO BIT FLAGS CLEARED HERE - SOMEONE ELSE'S JOB, MAN.
;
; EXCEPT WHEN ERASING:
; ASSUMES THAT EACH FOOTSWITCH-ON PLAYED A VOICE, TRIES TO GATE IT OFF.
; PASSES EVENTS TO MIDI/MTC TRANSMIT ROUTINE - IF IN NORMAL RECORD MODE,
; PASSES EVENTS TO SEQUENCER RECORD INPUT PROCESS AS WELL.
;
; NOTE!! IF AUTOREPEATING, DON'T BE ERASING, AND VICE-VERSA ....
;
; REGISTER CRUSHAGE: NOT SURE - BUT PROBABLY SUBSTANTIAL.
;
FTPADS_OFF_BOY
               MOVEQ   #1,D3                ;WALK BACKWARDS THROUGH BITS FOR TWO FOOTSWITCHES.
FTPD_OFF_10
               BTST    D3,D4                ;WE GOTS A FOOTSWITCH-OFF HERE?
               BEQ.S   FTPD_OFF_1L          ;BRANCH IF WE DOESN'T, GO ON TO NEXT SWITCH IF ANY.
               TST     D3                   ;WE DOES - WHICH FOOTSWITCH?
               BEQ.S   FTPD_OFF_18          ;BRANCH FOR FOOTSWITCH 2.
               MOVE    FTSW1_INDEX,D1       ;FOOTSWITCH 1 - DID NOTE-ON EDIT ARRAY ALT-PARAMS BIT?
               BMI.S   FTPD_OFF_1L          ;BRANCH IF NOT, NOTHING TO UNDO.
               MOVE    FTSW1_OLD_ALT,D2     ;YES - RETRIEVE ORIGINAL VALUE,
               BRA.S   FTPD_OFF_1C          ;GO RESTORE IT.
FTPD_OFF_18
               MOVE    FTSW2_INDEX,D1       ;FOOTSWITCH 2 - DID NOTE-ON EDIT ARRAY ALT-PARAMS BIT?
               BMI.S   FTPD_OFF_1L          ;BRANCH IF NOT, NOTHING TO UNDO.
               MOVE    FTSW2_OLD_ALT,D2     ;YES - RETRIEVE ORIGINAL VALUE AND RESTORE IT.
FTPD_OFF_1C
               MOVE    D1,A0                ;SET A0 AS INDEX INTO PAD/KIT ARRAYS.
               BCLR    #0,PAD_SOUNDS(A0)    ;EDIT WAS DONE RELATIVE TO THIS LABEL, UNDO SAME CELL.
               OR.B    D2,PAD_SOUNDS(A0)    ;EDIT BIT CLEARED OUT, ORIGINAL BIT RESTORED.
;
;22NOV               TST.B   BUILD_KIT_FLAG       ;ARE WE IN KIT-BUILD SCREEN?
;22NOV               BEQ.S   FTPD_OFF_1L          ;IF NOT, WE NOW BE CHILLIN' -
;22NOV               MOVE    D1,D5                ;YES - DERIVE "PAD" NUMBER FROM ARRAY INDEX,
;22NOV               AND     #7,D5
;22NOV               LSR     #3,D1                ;SEE IF THIS CELL IS IN THE CURRENTLY SELECTED KIT -
;22NOV               AND     #7,D1                ;IF SO, GOTTA UPDATE LAST_PAD_HIT, ALT_PARAM_FLAG.
;22NOV               CMP     EDIT_KIT_INDEX,D1
;22NOV               BNE.S   FTPD_OFF_1L          ;NOT THERE, SO PAD INDEX IS NOT A CONSIDERATION.
;22NOV               MOVE    D2,ALT_PARAM_FLAG    ;THERE - UPDATE ALT_PARAM_FLAG STATUS, LED WILL FOLLOW.
;22NOV               MOVE    D5,PAD_JUST_HIT      ;UPDATE PAD HIT INDEX, KEEP KIT-BUILD SCREEN RELEVANT.
;
FTPD_OFF_1L
               DBRA    D3,FTPD_OFF_10       ;LOOP BACK IF WE DI'NT CHECK BOTH FOOTSWITCH BITS YET.
;
               MOVEQ   #1,D3                ;AGAIN, BACKSTEP THROUGH BITS FOR TWO FOOTSWITCHES.
               TST.B   ERASING              ;ARE WE DOING SEQUENCE ERASE?
               BEQ.S   FTPD_OFF_50          ;BRANCH IF NOT - POP DOWN TO EVENT HANDLER STUFF.
               MOVE    #FTPAD_ERAS_BUF,A0   ;ELSE, THINGS ARE SIMPLER - A0 POINTS TO ERASE BUFFER
                                            ;CONTAINING SOUND # / ALT BIT FOR "ON" FOOTSWITCHES.
FTPD_OFF_40
               BTST    D3,D4                ;WE GOTS A FOOTSWITCH-OFF HERE?
               BEQ.S   FTPD_OFF_4C          ;BRANCH IF WE DOESN'T, GO ON TO NEXT SWITCH IF ANY.
               MOVE.B  (A0),D1              ;WE DO - GET SOUND/ALT BIT STORED BY FOOTSWITCH-ON -
               BMI.S   FTPD_OFF_4C          ;HO! WAIT A MINUTE - THIS CAN'T BE FOR REAL - MEANS
                                            ;NO "ON" FROM THIS FOOTSWITCH SINCE WE WENT INTO ERASE.
               ROR.B   #1,D1                ;ROTATE ALT BIT INTO BIT 7, SOUND NUMBER DOWN TO 4-0 -
               BMI.S   FTPD_OFF_44          ;BRANCH IF ALT BIT SET, EDIT ERASE MAP UPPER WORD.
               MOVE.L  INT_ERASE_MAP,D2     ;ALT BIT NOT SET, WE WANT ERASE MAP LOWER WORD.
               BCLR    D1,D2                ;REMOVE THIS SOUND/ALT-BIT FROM ERASE LIST.
               MOVE.L  D2,INT_ERASE_MAP
               BRA.S   FTPD_OFF_4C          ;HEAD FOR NEXT FOOTSWITCH BIT IF ANY.
FTPD_OFF_44
               MOVE.L  INT_ERASE_MAP+4,D2   ;ALT BIT SET, WE WANT ERASE MAP UPPER WORD.
               BCLR    D1,D2                ;REMOVE THIS SOUND/ALT-BIT FROM ERASE LIST.
               MOVE.L  D2,INT_ERASE_MAP+4
FTPD_OFF_4C
               ADDQ    #1,A0                ;LOOK FIRST AT FOOTSWITCH 1, THEN GO TO FOOTSWITCH 2.
               DBRA    D3,FTPD_OFF_40       ;LOOP UNTIL ALL FOOTSWITCH BITS CHECKED.
               BRA.S   FTPD_OFF_EXIT        ;THEN, WE'RE GONE.
;
;
FTPD_OFF_50
                                            ;NO, WE'RE NOT ERASING:
               CLR     D5                   ;START WITH EVENT BUFFER INDEX FOR FOOTSWITCH 1.
FTPD_OFF_60
               BTST    D3,D4                ;IS THIS ONE ONE OF THE ONES?
               BEQ.S   FTPD_OFF_80          ;BRANCH IF NOT, STEP TO NEXT ONE IF THERE IS ONE.
;
                                            ;WE GOT ONE! -
;
                                            ;VOICE GATE-OFF:
               TST     D3                   ;WHICH FOOTSWITCH ARE WE WORKING ON?
               BNE.S   FTPD_OFF_62          ;BRANCH IF FOOTSWITCH 1 -
               MOVE.L  FTSW_EVENT_ID_TBL+4,D0    ;ELSE FETCH FOOTSWITCH 2 VOICE ID TAG.
               BRA.S   FTPD_OFF_64
FTPD_OFF_62
               MOVE.L  FTSW_EVENT_ID_TBL,D0      ;FOOTSWITCH 1 VOICE ID TAG.
FTPD_OFF_64
               BSR     VOICE_GATE_OFF       ;THIS ROUTINE WILL FIND HIM AND KILL HIM.
;
                                            ;MIDI/MTC/SEQUENCER TRANSMIT:
               MOVE    D5,A0                ;SET UP A0 AS INDEX REGISTER FOR EVENT BUFFERS.
               SF      FTPAD_XMT_BUF+4(A0)  ;MIDI/MTC EVENT - CLEAR VELOCITY, CONVERT IT TO "OFF".
               BCLR    #0,FTPAD_SEQ_BUF+1(A0)    ;CONVERT BUFFERED SEQ "ON" EVENT TO "OFF" EVENT,
               BSET    #1,FTPAD_SEQ_BUF+1(A0)    ;BY TAMPERING WITH ITS EVENT TYPE ID CODE.
               BSR.S   FTPAD_XMT_BOY             ;PASS EVENT TO MIDI/MTC AND SEQUENCE HANDLERS.
;
FTPD_OFF_80
               ADDQ    #8,D5                ;ADVANCE EVENT BUFFER INDEX TO FOOTSWITCH 2 VALUE.
               DBRA    D3,FTPD_OFF_60       ;LOOP UNTIL ALL FOOTSWITCHES CHECKED.
;
FTPD_OFF_EXIT
               RTS
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
               SKIP
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; PASS FOOTSWITCH-PAD EVENT TO MIDI / MTC HANDLER -
; IF IN NORMAL RECORD MODE, PASS EVENT TO SEQUENCER INPUT AS WELL.
; D5 = 0 OR 8 - OFFSETS INTO EVENT BUFFERS FOR BOTH DESTINATIONS.
; USED FOR "ON" AND "OFF" EVENTS, BUFFER DATA MUST BE COMPLETE.
; ONE CALL, ONE FOOTSWITCH PAD EVENT.
; DESTROYS VIRTUALLY ALL REGISTERS, D5 NOT BEING ONE OF THE DESTROYED.
;
FTPAD_XMT_BOY
               MOVE    D5,A0                ;A0 SHALL BE THE EVENT BUFFER INDEX REGISTER.
               MOVE.L  FTPAD_XMT_BUF(A0),D0 ;RETRIEVE EVENT PAD # / SOUND # / ALT PARAMS BIT,
               MOVE.L  FTPAD_XMT_BUF+4(A0),D1    ;LIKEWISE VELOCITY / PITCH / PAN / LEVEL,
               BSR     XMIT_LIVE                 ;GIVE IT TO THE MIDI/MTC HANDLER.
;
               TST.B   RECORDING            ;ARE WE IN NORMAL RECORD MODE?
               BEQ.S   FTPD_XMT_EXIT        ;BRANCH IF NOT - WE'RE OUTA HERE, THEN.
;
               MOVE.L  SEQ_WR_PTR,A6        ;LOAD WRITE POINTERS FOR SEQUENCE RECORD PROCESSES,
               MOVE    WASTELAND_PTR,A3
               MOVE    PAD_ON_WRITE,A2      ;LIKEWISE FOR CURRENT PAD EVENT RECORD-INPUT VECTOR -
                                            ;HERE WE HAVE ASSUMED A NOTE-ON EVENT, TEST LATER.
;
               MOVE.L  FTPAD_SEQ_BUF(A0),D7 ;LOAD SEQ EVENT FOR TRANSFER TO RECORD MODULE.
               SWAP    D7
               MOVE    D7,D6                ;COPY FOR ANALYSIS OF EVENT TYPE (ON OR OFF).
               AND     #0FH,D6              ;CHECK EVENT TYPE ID FROM FIRST WORD -
               CMP     #1,D6                ;PAD-ON EVENT?
               BEQ.S   FTPD_XMT_20          ;BRANCH IF YES, RECORD VECTOR IS COOL -
               MOVE    NOTE_OFF_WRITE,A2    ;ELSE, WE NEED le speciale NOTE-OFF RECORD VECTOR.
FTPD_XMT_20
;
               JSR     (A2)                 ;HERE GOES FIRST WORD ....
               SWAP    D7
               JSR     (A2)                 ;THIS WOULD BE THE SECOND ....
               CMP     #1,D6                ;PAD-ON EVENT?
               BEQ.S   FTPD_XMT_40          ;BRANCH IF YES - LOG IN, TRANSMIT THIRD WORD.
                ABS_LONG
               JSR     LOG_OUT_NEW_PAD      ;ELSE, LOG OUT OF CURRENTLY-ON HANDLER - NO THIRD WORD.
                ABS_SHORT
               BRA.S   FTPD_XMT_80          ;SAVE NEW VALUES FOR RECORD POINTERS.
FTPD_XMT_40
                ABS_LONG
               JSR     LOG_IN_NEW_PAD       ;LOG IN TO CURRENTLY ON BUFFER
                ABS_SHORT
               MOVE    FTPAD_SEQ_BUF+4(A0),D7
               JSR     (A2)                 ;LAST AND PROBABLY LEAST.
FTPD_XMT_80
               MOVE.L  A6,SEQ_WR_PTR        ;DONE - SAVE POINTERS FOR SEQUENCE RECORD PROCESSES.
               MOVE    A3,WASTELAND_PTR
;
FTPD_XMT_EXIT
               RTS
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
