               INCLUDE HPFIXUPS
               TITLE "FOOTSWITCH HANDLERS"
***************************************************************************************************
***************************************************************************************************
***                                                                                             ***
***            FOOTSWBOY - HANDLERS PROGRAMMABLE FOOTSWITCHES                                   ***
***                                                                                             ***
***************************************************************************************************
***************************************************************************************************
;
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     FOOTSWITCH_1,FOOTSWITCH_2,FOOTSW_OFF_BOY
;
               EXTERNAL  FOOTSWITCH_SUB     ;EXTERNAL ROM.
               EXTERNAL  FOOTSW_PAD_SUB
               EXTERNAL  INSTALL_KIT,TOGGLE_ALT_PARAMS
               EXTERNAL  UPDATE_CUR_STUFF
;
               EXTERNAL  CURRENT_FOOTSW     ;THE RAM ZONE.
               EXTERNAL  FTSW1_ACTION
               EXTERNAL  FTSW2_ACTION
               EXTERNAL  CUR_SUB_BLOCK
               EXTERNAL  FOOTSW_SELECT
               EXTERNAL  SUBFUN_INSTALL
               EXTERNAL  FOOTSW_OFF
               EXTERNAL  FTSW1_OFF_ACT
               EXTERNAL  FTSW2_OFF_ACT
               EXTERNAL  FTSW1_SCROLL
               EXTERNAL  FTSW2_SCROLL
               EXTERNAL  SWITCHES_ON
               EXTERNAL  BUILD_KIT_FLAG
               EXTERNAL  KIT_INDEX
               EXTERNAL  ALT_PARAM_FLAG
               EXTERNAL  PAD_SOUNDS
               EXTERNAL  CUR_FTPADS_ON
               EXTERNAL  AUTORPT_FLAG
               EXTERNAL  NEW_FTPADS_ON
               EXTERNAL  NEW_FTPADS_OFF
               EXTERNAL  CUR_MIDI_PROG
               EXTERNAL  FTSW1_OLD_PGM
               EXTERNAL  FTSW2_OLD_PGM
               EXTERNAL  CUR_R_MAP
               EXTERNAL  CUR_L_MAP
               EXTERNAL  REPEAT_COUNT
               EXTERNAL  READY_TO_RPT
               EXTERNAL  NOW_REPEATING
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; PROGRAMMABLE FOOTSWITCH HANDLER - SWITCH-ON EVENTS:
; SWITCHBOY IS TRAINED TO CALL HERE WHEN ONE OF THE PROGRAMMABLE
; FOOTSWITCHES CLOSES (HE'S TOO DUMB TO DEAL WITH RELEASE EVENTS).
; SEPARATE ENTRY POINTS FOR EACH FOOTSWITCH, BUT MOST OF THE HANDLER
; IS COMMON TO BOTH - CURRENT_FOOTSW (.B) IS USED TO DIRECT THE ACTION
; WHERE A DISTINCTION IS NECESSARY.
;
; DIRECTLY INVOKES SUBFUNCTION REINSTALL IF IN ONE OF THE FOOTSWITCH
; SETUP SUBFUNCTIONS AND THE SWITCH THAT WAS HIT IS NOT THE ONE WHOSE
; SETUP IS BEING EDITED/DISPLAYED.  ALSO NOTE THAT FOOTSWITCH ACTION
; IS INHIBITED FOR CERTAIN SETTINGS IF IN ONE OF THESE SCREENS,
; IN ORDER TO AVOID CONFUSION.
;
; FOOTSWITCH ON-OFF ACTIONS ARE INTERLOCKED - THE "ON" EVENT SETS UP THE
; ACTION CODE FOR ITS ASSOCIATED "OFF" EVENT IN ORDER TO PREVENT SKEWING
; IN THE CASE OF MOMENTARY-ACTION FOOTSWITCH ROUTINGS.
;
;
;        FUNCTION CATEGORY         "ON" ACTION CODE    "OFF" ACTION CODE
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;  NO ACTION WHATSOEVER               0 (NONE)           0 (NONE)
;
;  ON-ONLY FRONT-PANEL SWITCHES         1-9              0 (NONE)
;  (SEE FTSWON_TBL BELOW)
;
;  MOMENTARY FRONT-PANEL SWITCHES      10-14               1-5
;  (FIRST FIVE IN FTSWON_TBL)
;
;  AUTOSCROLL FRONT-PANEL SWITCHES     15-20             0 (NONE)
;  (SEE FTSW_SCROLL_TBL BELOW)
;
;  EXIT SEQUENCE PLAYBACK LOOP          21               0 (NONE)
;
;  MOMENTARY PROGRAM SHIFT             22-37               6-21
;
;  PAD SOUND TRIGGER                   38-45               22-29
;
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;
;
FOOTSWITCH_1
               SF      CURRENT_FOOTSW       ;INDICATE FOOTSWITCH 1 BEING HANDLED.
               MOVE    FTSW1_ACTION,D0      ;FETCH ITS "ON" EVENT ACTION CODE.
               BRA.S   FOOTSWITCH_ON        ;HEAD FOR COMMON HANDLER.
;
FOOTSWITCH_2
               ST      CURRENT_FOOTSW       ;INDICATE FOOTSWITCH 2 BEING HANDLED.
               MOVE    FTSW2_ACTION,D0      ;FETCH ITS "ON" EVENT ACTION CODE.
                                            ;FALL THROUGH INTO COMMON HANDLER.
;
FOOTSWITCH_ON
               MOVE.L  CUR_SUB_BLOCK,D1     ;SEE IF WE'RE IN ONE OF THE FOOTSWITCH SETUP SCREENS.
               CMP.L   #FOOTSWITCH_SUB,D1
               BEQ.S   FTSWON_10            ;BRANCH IF IN SWITCH-ROUTING SETUP SCREEN.
               CMP.L   #FOOTSW_PAD_SUB,D1
               BNE.S   FTSWON_30            ;BRANCH IF NOT IN PAD-ROUTING SETUP SCREEN.
FTSWON_10
               TST.B   CURRENT_FOOTSW       ;WHICH FOOTSWITCH ARE WE HANDLING?
               BNE.S   FTSWON_20            ;BRANCH IF FOOTSWITCH 2.
               TST     FOOTSW_SELECT        ;HANDLING FOOTSWITCH 1 - ARE WE EDITING ITS SETUP?
               BEQ.S   FTSWON_30            ;BRANCH IF YES, NO REINSTALL NEEDED.
               CLR     FOOTSW_SELECT        ;ELSE SELECT FOOTSWITCH 1 FOR EDITING,
               ST      SUBFUN_INSTALL       ;INVOKE REINSTALL,
               BRA.S   FTSWON_30            ;MOVE ON.
FTSWON_20
               TST     FOOTSW_SELECT        ;HANDLING FOOTSWITCH 2 - ARE WE EDITING ITS SETUP?
               BNE.S   FTSWON_30            ;BRANCH IF YES, NO REINSTALL NEEDED.
               ADDQ    #1,FOOTSW_SELECT     ;ELSE SELECT FOOTSWITCH 2 FOR EDITING,
               ST      SUBFUN_INSTALL       ;INVOKE REINSTALL, MOVE ON.
FTSWON_30
;
               TST     D0                   ;SEE WHAT THE ACTION IS -
               BEQ     FTSWON_EXIT          ;EXIT IF NO ACTION.
               CMP     #15,D0
               BLT.S   FTSWON_50            ;BRANCH FOR NORMAL AND MOMENTARY SWITCH-ROUTINGS.
               CMP     #21,D0
               BLT.S   FTSWON_40            ;BRANCH FOR AUTOSCROLLED-SWITCH ROUTING.
               BEQ.S   FTSWON_90            ;BRANCH FOR SEQUENCE PLAYBACK LOOP EXIT.
               CMP     #38,D0
               BLT     PROGRAM_SHIFT        ;BRANCH FOR MOMENTARY KIT/MIDI-PROGRAM SHIFT.
               BRA     FOOT_PAD_ON          ;BRANCH TO PLAY A PAD-ON EVENT.
;
FTSWON_40
                                            ;WE'VE GOT US ONE O' THE AUTOSCROLLED SWITCHES -
                                            ;IF IN FOOTSWITCH EDIT SCREEN, SUPPRESS ACTION UPON
                                            ;FOOTSWITCHES ROUTED TO AN AUTOSCROLLED SWITCH.
               CMP.L   #FOOTSWITCH_SUB,CUR_SUB_BLOCK
               BEQ.S   FTSWON_EXIT
               CMP.L   #FOOTSW_PAD_SUB,CUR_SUB_BLOCK
               BEQ.S   FTSWON_EXIT
FTSWON_48
               SUB     #15,D0                    ;NOW DOWN TO ZERO-RELATIVESVILLE ....
               MOVE.B  FTSW_SCROLL_TBL(PC,D0),D0 ;FETCH TARGET SWITCH NUMBER.
               TST.B   CURRENT_FOOTSW            ;WHICH FOOTSWITCH, AGAIN?
               BNE.S   FTSWON_4C                 ;BRANCH IF FOOTSWITCH 2,
               MOVE    D0,FTSW1_SCROLL           ;ELSE SET UP ACTION AROUND FOOTSWITCH 1.
               BRA.S   FTSWON_80                 ;HEAD DOWN TO WHERE WE SET A BIT IN SWITCHES_ON.
FTSWON_4C
               MOVE    D0,FTSW2_SCROLL           ;SET UP ACTION AROUND FOOTSWITCH 2.
               BRA.S   FTSWON_80                 ;HEAD DOWN TO WHERE WE SET A BIT IN SWITCHES_ON.
;
FTSW_SCROLL_TBL
               DC.B    51              ;TEMPO UP.
               DC.B    52              ;TEMPO DOWN.
               DC.B    35              ;INCREMENT.
               DC.B    34              ;DECREMENT.
               DC.B    44              ;FAST-FORWARD.
               DC.B    42              ;REWIND.
               EVEN
;
FTSWON_50
               CMP     #10,D0               ;MOMENTARY-ACTION SWITCH ROUTING?
               BLT.S   FTSWON_70            ;BRANCH IF NOT, NO "OFF" ACTION NEED BE SET UP.
               SUB     #9,D0                ;MOMENTARY ROUTINGS CORRESPOND TO FIRST FIVE
                                            ;NON-MOMENTARY ROUTINGS, AND "OFF" ACTION IS SAME
                                            ;AS "ON" ACTION FOR THEM -
               TST.B   CURRENT_FOOTSW       ;WHICH FOOTSWITCH, AGAIN?
               BNE.S   FTSWON_60            ;BRANCH IF FOOTSWITCH 2,
               MOVE    D0,FTSW1_OFF_ACT     ;ELSE SET UP "OFF" ACTION FOR FOOTSWITCH 1.
               BRA.S   FTSWON_70            ;PROCEED WITH "ON" ACTION.
FTSWON_60
               MOVE    D0,FTSW2_OFF_ACT     ;SET UP "OFF" ACTION FOR FOOTSWITCH 2.
FTSWON_70
               SUBQ    #1,D0                ;NOW DOWN TO ZERO-RELATIVESVILLE ....
               MOVE.B  FTSWON_TBL(PC,D0),D0 ;FETCH NUMBER OF SWITCH TO WHICH WE ARE ROUTED,
                                            ;FAKE A HIT UPONST IT VIA SWITCH_SCAN RAM.
FTSWON_80
               MOVE    D0,D1                ;MAKE-UM COPY.
               LSR     #3,D1                ;D1 INDEXES TO ROW IN SWITCH MATRIX,
               MOVE    D1,A0
               BSET    D0,SWITCHES_ON(A0)   ;D0 (MOD 8) GETS US TO THE BIT WE WANT -
               BRA.S   FTSWON_EXIT          ;WE'VE JUST FAKED A HIT ON SWITCH WE'RE ROUTED TO.
;
FTSWON_TBL
               DC.B    50              ;AUTOREPEAT.
               DC.B    40              ;ERASE.
               DC.B    41              ;RECORD.
               DC.B    46              ;PAUSE.
               DC.B    49              ;ALT-PARAMS.
               DC.B    48              ;KIT/BANK.
               DC.B    53              ;TAP TEMPO.
               DC.B    43              ;PLAY.
               DC.B    39              ;ENTER.
               EVEN
;
FTSWON_90
                                       ;EXIT FROM SEQUENCE PLAYBACK REPEAT LOOP:
               TST     REPEAT_COUNT    ;ARE WE CURRENTLY IN A REPEAT LOOP?
               BEQ.S   FTSWON_EXIT     ;NOT AT ALL, IF REPEAT_COUNT = 0.
               TST.B   READY_TO_RPT    ;HAVE WE ENTERED REPEAT LOOP SECTION YET?
               BEQ.S   FTSWON_EXIT     ;NO - DON'T ALLOW REPEAT LOOP EXIT TOO FAR BEFORE THE FACT.
               TST.B   NOW_REPEATING   ;YES - ARE WE ACTUALLY REPEATING, OR JUST ABOUT TO BE?
               BNE.S   FTSWON_94       ;ACTUALLY REPEATING - SET REPEAT COUNT = 1 TO STOP DOING IT.
               CLR     REPEAT_COUNT    ;NOT QUITE REPEATING - SET TO ZERO TO PREVENT LOOPING.
               BRA.S   FTSWON_EXIT
FTSWON_94
               MOVE    #1,REPEAT_COUNT ;ACTUALLY LOOPING - THIS'LL BE LAST TIME.
;
;
FTSWON_EXIT
               RTS
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
               SKIP
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; PROGRAMMABLE FOOTSWITCH RELEASE HANDLER -
; WE COME HERE BECAUSE ONE OR MORE BITS IS SET IN FOOTSW_OFF(.B).
; FINDS AND HANDLES ONE FOOTSWITCH RELEASE EVENT PER BIT SET -
; CLEARS THAT BIT, TO BOOT.
;
FOOTSW_OFF_BOY
               BCLR    #1,FOOTSW_OFF        ;EH, WOT ABOUT FOOTSWITCH 1?
               BEQ.S   FTSWOFF_10           ;NAW - SEE ABOUT NUMBAH TWO.
               MOVE    FTSW1_OFF_ACT,D0     ;YES - FETCH ACTION CODE FOR FOOTSWITCH 1 OFF,
               CLR     FTSW1_OFF_ACT        ;WIPE OUT THE OFF-ACTION CODE (SET BY SWITCH ON),
               SF      CURRENT_FOOTSW       ;CLEAR FLAG TO INDICATE FOOTSWITCH 1 BEING SERVICED,
               BRA.S   FTSWOFF_20           ;HEAD FOR COMMON HANDLER INTERFACE.
FTSWOFF_10
               BCLR    #0,FOOTSW_OFF        ;EH, WOT ABOUT FOOTSWITCH 2?
               BEQ.S   FTSWOFF_EXIT         ;NAW - SOMEONE FUCKED UP - ANYWAY, LET'S GET OTTA HERE.
               MOVE    FTSW2_OFF_ACT,D0     ;YES - FETCH ACTION CODE FOR FOOTSWITCH 2 OFF,
               CLR     FTSW2_OFF_ACT        ;WIPE OUT THE OFF-ACTION CODE (SET BY SWITCH ON),
               ST      CURRENT_FOOTSW       ;SET FLAG TO INDICATE FOOTSWITCH 2 BEING SERVICED,
                                            ;FALL THROUGH INTO COMMON HANDLER INTERFACE.
;
FTSWOFF_20
               TST     D0                   ;SO, WHAT'S UP?
               BEQ.S   FTSWOFF_EXIT         ;NOTHING, THAT'S WOT.
               CMP     #6,D0                ;SOMETHING .... HAVE 'NOTHER LOOK ...
               BLT.S   FTSWOFF_40           ;BRANCH TO HANDLE A BASIC MOMENTARY SWITCH.
               CMP     #21,D0               ;STILL NOT SURE ....
               BGT     FOOT_PAD_OFF         ;BRANCH TO PLAY A PAD-OFF EVENT.
               BRA     PROGRAM_UNSHIFT      ;BRANCH TO RESTORE KIT/MIDI-PROGRAM SHIFTED AWAY FROM.
;
FTSWOFF_40
                                            ;HANDLE A BASIC MOMENTARY SWITCH:
               SUBQ    #1,D0                ;STEP DOWN TO ZERO-RELATIVESVILLE ....
               MOVE.B  FTSWON_TBL(PC,D0),D0 ;FETCH NUMBER OF SWITCH TO WHICH WE ARE ROUTED,
                                            ;FAKE A HIT UPONST IT VIA SWITCH_SCAN RAM.
               MOVE    D0,D1                ;MAKE-UM COPY.
               LSR     #3,D1                ;D1 INDEXES TO ROW IN SWITCH MATRIX,
               MOVE    D1,A0
               BSET    D0,SWITCHES_ON(A0)   ;D0 (MOD 8) GETS US TO THE BIT WE WANT -
;
FTSWOFF_EXIT
               RTS
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
               SKIP
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; PLAY A PAD-ON EVENT FROM A FOOTSWITCH:
; SET UP BASIC NECESSARY PARAMETERS AND "OFF" ACTION,
; SET BIT FLAGS WHICH WILL BE PICKED UP BY BACKGROUND TO PLAY EVENT.
;
FOOT_PAD_ON
               SUB     #16,D0               ;CONVERT "ON" ACTION CODE TO "OFF" ACTION CODE.
               CLR     D2                   ;SET BIT INDEX FOR PAD-FOOTSWITCH STATUS BIT MAPS.
               TST.B   CURRENT_FOOTSW
               BNE.S   FP_ON_10             ;BIT 0 FOR FOOTSWITCH 2,
               ADDQ    #1,D2                ;BIT 1 FOR FOOTSWITCH 1.
               MOVE    D0,FTSW1_OFF_ACT     ;SET "OFF" ACTION,
               BRA.S   FP_ON_20             ;BRANCH TO SET FOOTSWITCH STATUS BIT FLAGS.
FP_ON_10
               MOVE    D0,FTSW2_OFF_ACT     ;SET "OFF" ACTION,
FP_ON_20
               BSET    D2,CUR_FTPADS_ON     ;"THIS" PAD-FOOTSWITCH NOW BE ON -
               TST.B   AUTORPT_FLAG         ;ARE WE IN AUTOREPEAT MODE?
               BNE.S   FP_ON_EXIT           ;BRANCH IF YES, AUTOREPEAT HANDLER WILL PICK IT UP -
               BSET    D2,NEW_FTPADS_ON     ;ELSE SET HIM TOO, TO TRIGGER EVENT.
FP_ON_EXIT
               RTS
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; PLAY A PAD-OFF EVENT FROM A FOOTSWITCH:
; SET BIT FLAG WHICH WILL BE PICKED UP BY BACKGROUND TO PLAY EVENT.
;
FOOT_PAD_OFF
               CLR     D2                   ;SET BIT INDEX FOR PAD-FOOTSWITCH STATUS BIT MAPS.
               TST.B   CURRENT_FOOTSW
               BNE.S   FP_OFF_10            ;BIT 0 FOR FOOTSWITCH 2,
               ADDQ    #1,D2                ;BIT 1 FOR FOOTSWITCH 1.
FP_OFF_10
               BCLR    D2,CUR_FTPADS_ON     ;"THIS" PAD-FOOTSWITCH NOW BE OFF -
               TST.B   AUTORPT_FLAG         ;ARE WE IN AUTOREPEAT MODE?
               BNE.S   FP_OFF_EXIT          ;BRANCH IF YES, AUTOREPEAT HANDLER WILL PICK IT UP -
               BSET    D2,NEW_FTPADS_OFF    ;ELSE SET HIM TOO, TO TRIGGER EVENT.
FP_OFF_EXIT
               RTS
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
               SKIP
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; MOMENTARY (MIDI) PROGRAM SHIFT -
; NOTE - AFFECTS 440 INTERNALS ONLY, NOTHING TRANSMITTED OVER MIDI.
;
;
; FOOTSWITCH ON - SHIFT TO NEW PROGRAM:
;
PROGRAM_SHIFT
               MOVE    CUR_MIDI_PROG,D1     ;SAVE CURRENT PROGRAM NUMBER.
               SUB     #22,D0               ;CONVERT FOOTSWITCH "ON" ACTION CODE TO NEW PGM NUMBER.
               MOVE    D0,CUR_MIDI_PROG     ;SET NEW PROGRAM NUMBER.
               ADDQ    #6,D0                ;D0 IS NOW FOOTSWITCH "OFF" ACTION CODE.
               TST.B   CURRENT_FOOTSW       ;WHICH FOOTSWITCH DID THIS?
               BNE.S   PGM_SHFT_10          ;BRANCH FOR FOOTSWITCH 2.
               MOVE    D0,FTSW1_OFF_ACT     ;STORE FOOTSWITCH 1 "OFF" ACTION (RESTORE OLD PGM),
               MOVE    D1,FTSW1_OLD_PGM     ;STORE THE NUMBER OF PROGRAM TO RESTORE AT "OFF" TIME.
               BRA.S   DO_THE_SHIFT         ;GO FINISH INSTALLATION OF NEW PROGRAM.
PGM_SHFT_10
               MOVE    D0,FTSW2_OFF_ACT     ;STORE FOOTSWITCH 2 "OFF" ACTION (RESTORE OLD PGM),
               MOVE    D1,FTSW2_OLD_PGM     ;STORE THE NUMBER OF PROGRAM TO RESTORE AT "OFF" TIME.
               BRA.S   DO_THE_SHIFT         ;GO FINISH INSTALLATION OF NEW PROGRAM.
;
;
;
; FOOTSWITCH OFF - RESTORE PROGRAM WE WERE IN AT FOOTSWITCH "ON" TIME:
;
PROGRAM_UNSHIFT
               TST.B   CURRENT_FOOTSW       ;WHICH FOOTSWITCH DID THIS?
               BNE.S   PGM_UNSH_10          ;BRANCH FOR FOOTSWITCH 2.
               MOVE    FTSW1_OLD_PGM,D0     ;FETCH THE NUMBER OF PROGRAM TO RESTORE,
               BRA.S   SET_OLD_PGM          ;GO STORE AND FINISH INSTALLATION OF OLD PROGRAM.
PGM_UNSH_10
               MOVE    FTSW2_OLD_PGM,D0     ;STORE THE NUMBER OF PROGRAM TO RESTORE AT "OFF" TIME.
SET_OLD_PGM
               MOVE    D0,CUR_MIDI_PROG     ;BACK TO OLD PROGRAM NUMBER.
;
DO_THE_SHIFT
                ABS_LONG
               JSR     UPDATE_CUR_STUFF     ;DOES A BUNCHA NUTS & BOLTS MIDI HOUSEKEEPING,
                ABS_SHORT                   ;INCLUDING CALLING UP NEW KITS FOR LEFT, RIGHT MAPS.
               MOVE    CUR_R_MAP,D0         ;FOLLOW THRU BY INSTALLING BOTH KITS INTO PAD ARRAYS.
                ABS_LONG
               JSR     INSTALL_KIT
                ABS_SHORT
               MOVE    CUR_L_MAP,D0         ;DO LEFT MAP LAST, SO KIT_INDEX FOLLOWS ITS KIT NUMBER.
                ABS_LONG
               JSR     INSTALL_KIT
                ABS_SHORT
;
PGM_SHFT_EXIT
               RTS
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
