***************************************************************************************************
***************************************************************************************************
***                                                                                             ***
***            RAM_440 - MODEL 440 RAM DEFINITIONS                                              ***
***                                                                                             ***
***************************************************************************************************
***************************************************************************************************
;
               INCLUDE G_RAM_440       ;GLOBAL DECLARATIONS FOR RAM VARIABLES.
               INCLUDE S_BLK_EQU       ;SOUND BLOCK DEFINITIONS.
               INCLUDE Q_BLK_EQU       ;SEQUENCE DIRECTORY BLOCK DEFINITIONS.
               INCLUDE G_Q_BLK         ;SEQUENCE DIRECTORY GLOBAL DECLARATIONS.
               INCLUDE V_BLK_EQU       ;VOICE BLOCK DEFINITIONS.
               INCLUDE G_V_BLK         ;VOICE BLOCK GLOBAL DECLARATIONS.
;
;880704               .AWORD
;
;
;880704               .ORG     0FFF80000H      ;THE VERY BEGINNING OF RAM ....
;                  .... HANDLE THIS WITH A SEGMENT LOAD ADDRESS AT LINK TIME,
;                  SINCE EITHER THE ASSEMBLER OR THE LINKER IS HAVING TROUBLE
;                  RECOGNIZING THIS .ORG STATEMENT - TREATS IT AS ZERO (!).
;


               .REGION LONGRAM         ;RAM STARTING AT 0FFF80000H,
                                       ;THROUGH 0FFFF7FFFH -
                                       ;IE, REQUIRING LONG ADDRESSING MODE.


;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; BULK SEQUENCE MEMORY -
; 400 BLOCKS, 1K BYTE EACH:
;
SEQUENCE_RAM   DS.B    400*1024
;
SEQ_RAM_END    EQU     *
;
;
;
; SEQUENCE DIRECTORY:
;
SEQ_DIRECTORY
;881025               REPT    100
               .FOR COUNT = 1,100
               DS.B    Q_BLOCK_SIZE
               .ENDFOR
;
SEQ_DIR_99     EQU     *-(Q_BLOCK_SIZE)     ;LOCATION OF THE NULL SEQUENCE (SEQ. #99) DIRECTORY -
                                            ;THIS IS WHERE FREE BLOCK LIST IS MAINTAINED.
                                            ;SAVED TO DISK, BUT NOT ACCESSIBLE TO PLAY/RECORD/EDIT.
;
;
;
; SONG LIST - NOMINALLY 12 SONGS, 512 STEPS EACH:
;
SONG_LIST
               DS.W    12*512
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; MIDI MULTI MODE KEYMAPS:
;
MAP_ARRAY      DS.L    88*32           ;32 POSSIBLE MAPS (MIDI CHANS 1A -> 16B)
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; NOTES_CURRENTLY_ON BUFFERS.  IMAGE OF SEQUENCE EVENTS FOR NOTES & PADS
; RECEIVED ON (w/o OFF) FROM SEQUENCER OR PADS.
;
OLD_MIDI_BUFS  DS.L    128*32
;
END_OF_OLD_MIDI
;
;
;
NEW_MIDI_BUFS  DS.L    128*32
;
END_OF_NEW_MIDI
;
;
;
OLD_PAD_BUFS   DS.L    32*8
;
END_OF_OLD_PADS
;
;
;
NEW_PAD_BUFS   DS.L    8*8
;
END_OF_NEW_PADS DS.W   1               ;NO, I DON'T KNOW WHAT THIS WORD IS RESERVED FOR  - MATT.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
;
; SPACE IN WHICH TO COMPILE NOTES-CURRENTLY-ON STATUS SNAPSHOT AT
; PLAYBACK REPEAT-LOOP START POINT:
;
RP_ST_MIDI_ON  DS.L    256             ;BASED ON 32 MIDI NOTES ON PER TRACK - PRETTY LARGE, HUH.
;
RP_ST_PADS_ON  DS.L    64              ;BASED ON 8 PADS ON PER TRACK - AN AWESOME POSSIBILITY.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; SPACE IN WHICH TO COMPILE DISK DIRECTORIES:
; NOTE: IN THIS VERSION OF "THE SYSTEM" WE ARBITRARILY DECIDE THAT
; 100 NAMES AT ANY ONE TIME IS QUITE ENOUGH - FOR SCSI HARD DISK
; DIRECTORIES, THIS MEANS THE UPPER LIMIT ON DRIVE CAPACITY IS ROUGHLY
; 80 MEGABYTES FORMATTED (FOR ANY ONE DRIVE).
;
DIRECTORY_BUF  DS.W    416             ;THIS IS ENOUGH FOR 104 EIGHT-CHAR NAMES, BECAUSE FLOPPY
                                       ;SEQ DIR IS MAINTAINED IN 13 DISK RECORDS AND DIRECTORY-
                                       ;COMPILE ROUTINE TREATS THEM ALL THE SAME, EVEN THOUGH THE
                                       ;LAST ONE CONTAINS ONLY FOUR DIRECTORY BLOCKS INSTEAD OF THE
                                       ;USUAL EIGHT.
;
;
BANK_TYPE_BUF  DS.B    100             ;FOR SCSI HARD DISK BANK DIRECTORY COMPILATION - IN ADDITION
                                       ;TO AN EIGHT-CHAR NAME PER BANK, WE ALSO NEED TO RECORD AND
                                       ;DISPLAY THE TYPE OF EACH BANK (SOUND, SEQ, EMPTY, ETC.).
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
               TTL     "ABS_SHORT ADDRESS RAM DEFS"
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
;
; MOST SYSTEM VARIABLES AND NON-SEQUENCE ARRAYS
; ARE IN SHORT-ADDRESS AREA OF RAM, TO CUT CODE SPACE
; AND REDUCE EXECUTION TIME.
;
;881025               .ORG     0FFFF8000H


               .REGION SHORTRAM        ;RAM FROM 0FFFF8000H THRU 0FFFFFFFFH -
                                       ;ALLOWS THE USE OF ABSOLUTE SHORT
                                       ;ADDRESSING MODE.
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; SOUND PARAMETER BLOCK ARRAY:
;
; 32 BLOCKS (ONE PER SAMPLE), EACH WITH COMMON BLOCK AND TWO SUB-BLOCKS.
;
S_BLK_00
;881025               REPT    32
               .FOR COUNT = 1,32
               DS.B    S_BLOCK_SIZE
               .ENDFOR
;
S_BLK_31       EQU     S_BLK_00+31*S_BLOCK_SIZE  ;ADDRESS OF BLOCK 31.
;
SOUND_ARRAY_END
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; COUNTERS FOR THE NOTES_CURRENTLY_ON BUFFERS.  KEEPS TRACK OF HOW MANY
;  "ON" EVENTS ARE PENDING IN EACH 'POCKET' ('POCKETS' ARE GROUPS OF
;  EVENTS DIVIDED BY MIDI CHANNEL OR PAD NUMBER).  THESE INDIVIDUAL
;  COUNTS HELP SPEED UP DUMPS OF THESE LISTS.
;
O_M_D_1A       DS.W    32              ;OLD MIDI NOTES
;
N_M_D_1A       DS.W    32              ;NEW MIDI NOTES
;
O_P_D_1        DS.W    1               ;OLD PADS
O_P_D_2        DS.W    1
O_P_D_3        DS.W    1
O_P_D_4        DS.W    1
O_P_D_5        DS.W    1
O_P_D_6        DS.W    1
O_P_D_7        DS.W    1
O_P_D_8        DS.W    1
;
N_P_D_1        DS.W    1               ;NEW PADS
N_P_D_2        DS.W    1
N_P_D_3        DS.W    1
N_P_D_4        DS.W    1
N_P_D_5        DS.W    1
N_P_D_6        DS.W    1
N_P_D_7        DS.W    1
N_P_D_8        DS.W    1
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; PAD KIT/BANK ARRAYS -
; INDEXING IS (8 * PAD NUMBER) + KIT NUMBER.
; KITS 0-3 CORRESPOND TO PRESET BANKS 1-4,
; KITS 4-7 CORRESPOND TO USER-PROGRAMMABLE KITS 1-4.
; PRESET BANK AND USER KIT SETTINGS ARE MAINTAINED IN KIT ARRAYS,
; WHEREAS LIVE PAD PLAYBACK NORMALLY USES SETTINGS FROM PAD ARRAYS -
; KIT ARRAYS ARE USED DIRECTLY ONLY WHEN IN KIT-BUILD SCREEN/MODE.
; EDITS VIA LEVEL/PITCH/PAN KNOBS AFFECT ONLY THE PAD ARRAY SETTINGS
; OF USER KITS UNLESS THE BUILD-KIT FUNCTION IS CURRENTLY SELECTED -
; IN THAT CASE, ONLY THE KIT ARRAYS ARE DIRECTLY EDITED (WITH UPDATING
; OF LIVE PAD ARRAYS POSTPONED UNTIL EXIT FROM KIT-BUILD SCREEN/MODE).
; WHEN NOT IN KIT-BUILD SCREEN/MODE,
; SELECTION OF A NEW KIT OR BANK CAUSES SETTINGS FROM THE NEW KIT'S
; SECTIONS OF THE KIT ARRAYS TO BE COPIED INTO CORRESPONDING PAD ARRAYS.
;
;  ************** ! ! ! ! W A R N I N G ! ! ! ! **************
;
; PAD AND KIT ARRAYS ARE SAVED TO / LOADED FROM DISK IN SINGLE BLOCK,
; AND VARIOUS ROUTINES DO INDEXING BASED ON FIXED RELATIONSHIPS OF
; PAD AND KIT ARRAYS TO ONE ANOTHER.
; IF YOU REARRANGE ANY ASPECT OF THESE ARRAYS, YOU ARE A JERK.
;
PAD_SOUNDS     DS.B    64              ;VALUES 0-63 INDICATE A AND B VERSIONS OF 32 SOUNDS.
;
PAD_PITCHES    DS.B    64              ;VALUES 0-31, TO COVER AVAILABLE COARSE PITCH SETTINGS.
;
PAD_LEVELS     DS.B    64              ;VALUES 0-31, TO COVER AVAILABLE SOUND VOLUME SETTINGS.
;
PAD_PANS       DS.B    64              ;VALUES 0-31, TO COVER AVAILABLE STEREO-MIX PAN SETTINGS.
;
;
KIT_SOUNDS     DS.B    64              ;VALUES 0-63 INDICATE A AND B VERSIONS OF 32 SOUNDS.
;
KIT_PITCHES    DS.B    64              ;VALUES 0-31, TO COVER AVAILABLE COARSE PITCH SETTINGS.
;
KIT_LEVELS     DS.B    64              ;VALUES 0-31, TO COVER AVAILABLE SOUND VOLUME SETTINGS.
;
KIT_PANS       DS.B    64              ;VALUES 0-31, TO COVER AVAILABLE STEREO-MIX PAN SETTINGS.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; SEQUENCE MEMORY MANAGEMENT BLOCK LIST:
;
SEQ_BLOCK_LIST DS.W    400                  ;ONE WORD PER BLOCK OF SEQUENCE MEMORY -
                                            ;EACH WORD CONTAINS THE LINK POINTER OF ITS BLOCK,
                                            ;WHICH IS THE BLOCK INDEX OF THE BLOCK IT LINKS TO
                                            ;(OR = -1 TO INDICATE THAT IT HAS NO FORWARD LINK).
;
;
;
; SEQUENCE MEMORY MANAGEMENT VARIABLES:
;
SEQ1_DRD_BLK   DS.W    1               ;INDEX OF CURRENT DESTRUCTIVE READ BLOCK, STREAM 1.
;
SEQ1_DRD_PTR   DS.L    1               ;STORED STREAM 1 DESTRUCTIVE READ ABSOLUTE POINTER.
;
SEQ1_DRD_CNT   DS.W    1               ;WORDS-REMAINING COUNT FOR STREAM 1 DESTRUCTIVE READ BLOCK.
;
SEQ_NDRD_BLK   DS.W    1               ;INDEX OF CURRENT NON-DESTRUCTIVE READ BLOCK.
;
SEQ_NDRD_PTR   DS.L    1               ;STORED NON-DESTRUCTIVE READ ABSOLUTE POINTER.
;
SEQ_NDRD_CNT   DS.W    1               ;WORDS-REMAINING COUNT FOR NON-DESTRUCTIVE READ BLOCK.
;
SEQ_WR_BLK     DS.W    1               ;INDEX OF CURRENT WRITE BLOCK.
;
PREV_WR_BLK    DS.W    1               ;INDEX OF PREVIOUS WRITE BLOCK (BEFORE SEQ_WR_BLK).
;
SEQ_WR_PTR     DS.L    1               ;STORED WRITE ABSOLUTE POINTER.
;
;30SEP;
;30SEPWASTE_WR_PTR   DS.L    1               ;AS ABOVE, FOR WASTELAND (RECORDING BUFFER)
;30SEP;
;
WASTELAND_PTR  DS.W    1               ;AS ABOVE, FOR USE OF WASTELAND AS RECORD BUFFER -
                                       ;NOTE THAT .AWORD ADDRESSES ARE ASSUMED.
;
SEQ_WR_CNT     DS.W    1               ;WORDS-REMAINING COUNT FOR WRITE BLOCK.
;
RPT_START_BLK  DS.W    1               ;INDEX OF BLOCK IN WHICH CURRENT REPEAT LOOP STARTS.
;
RPT_START_CNT  DS.W    1               ;WORDS-TO-READ IN REPEAT START BLOCK AT REPEAT START POINT.
;
RPT_START_PTR  DS.L    1               ;ABSOLUTE-LONG POINTER TO REPEAT LOOP START (BAR MARKER).
;
LAST_FREE_BLK  DS.W    1               ;INDEX OF THE LAST BLOCK IN THE FREE BLOCK LIST -
                                       ;a.k.a. THE LAST BLOCK IN THE NULL SEQUENCE (SEQ. #99).
;
NEXT2LAST_FREE DS.W    1               ;INDEX OF THE NEXT-TO-LAST FREE BLOCK - THE ONE WHICH
                                       ;LINKS TO LAST_FREE_BLK.
;
                                       ;FLAGS TO TRACK/CONTROL SEQUENCE STATE TRANSITIONS:
LAST_SETUP_SEQ DS.W    1               ;INDICATES WHICH SEQUENCE WAS LAST SET UP FOR DESTRUCTIVE
                                       ;READ - SEQ_CONSOLIDATE, SEQ_TURNAOUND AND UPDATE_SEQ_SIZE
                                       ;WILL AUTOMATICALLY OPERATE ON THIS SEQUENCE.
SETUP_STATE    DS.B    1               ;INDICATES DESTR RD/WR SETUP (SEQ1_DRD_SETUP) LAST DONE.
CONSOL_STATE   DS.B    1               ;INDICATES SEQ_CONSOLIDATE LAST DONE.
TURNAR_STATE   DS.B    1               ;INDICATES SEQ_TURNAROUND LAST DONE.
UPDATE_STATE   DS.B    1               ;INDICATES UPDATE_SEQ_SIZE LAST DONE.
;
SEQ_MEM_FULL   DS.B    1               ;NORMALLY = 0, SET IF LESS THAN TWO FREE MEMORY BLOCKS -
                                       ;INDICATES RECORDING AND SUCH LIKE ARE NOT COOL.
               .ALIGN 2
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; COMMUNICATIONS BUFFERS, BUFFER POINTERS, BUFFER COUNTERS.
;
                   .ALIGN 2
;
MA_RCV_BUFF        DS.B 400H           ;UART "A" RECEIVE BUFFER.
MA_RCV_IN          DS.W 1              ;BUFFER INPUT POINTER.
MA_RCV_OUT         DS.W 1              ;BUFFER OUTPUT POINTER.
MA_RCV_CNT         DS.W 1              ;BUFFER COUNT.
;
MA_XMIT_LIVE_BUFF  DS.B 400H           ;UART "A" LIVE EVENT TRANSMIT BUFFER.
MA_XMIT_LIVE_IN    DS.W 1              ;BUFFER INPUT POINTER.
MA_XMIT_LIVE_OUT   DS.W 1              ;BUFFER OUTPUT POINTER.
MA_XMIT_LIVE_CNT   DS.W 1              ;BUFFER COUNT.
;
MA_XMIT_SEQ_BUFF   DS.B 800H           ;UART "A" SEQUENCE EVENT TRANSMIT BUFFER.
MA_XMIT_SEQ_IN     DS.W 1              ;BUFFER INPUT POINTER.
MA_XMIT_SEQ_OUT    DS.W 1              ;BUFFER OUTPUT POINTER.
MA_XMIT_SEQ_CNT    DS.W 1              ;BUFFER COUNT.
MA_XMIT_SEQ_GATE   DS.W 1              ;BUFFER GATE - IF = 0, SEQ EVENTS ARE HELD BACK PENDING
                                        ;NEXT 96TH-NOTE CLOCK.  IF > 0, INDICATES NUMBER OF
                                        ;96-TH NOTES FOR WHICH SEQUENCE EVENT TRANSMISSION NEED NOT
                                        ;BE HELD BACK (DEMARCATED BY TIMING BYTES (F8H) IN BUFFER).
MA_XMIT_SEQ_TIME   DS.W 1              ;TIMEOUT UNTIL SEQUENCE BUFFER IS RELEASED.  UNITS ARE REALTIME
                                        ;(LEVEL 3) INTS.  ONCE = 0, LEVEL 3 ENABLES UART AND SETS GATE
                                        ;HIGH.  BACKGROUND LOADS UP THIS TIMEOUT WHEN DONE PARSING A
                                        ;CLICK'S WORTH OF DATA.
MA_TIME_BUFF       DS.W 1              ;COUNTDOWN 'TILL NEXT BUFFER DUMP - OFFLOADED IN LEVEL3
;
MA_SEQ_ADVANCE DS.W    1               ;THIS IS THE AMOUNT OF ADVANCE OR DELAY THAT A BUFFER OF
                                       ; MIDI SEQUENCE DATA IS SUPPOSED TO BE FIRED IN RELATION TO A
                                       ; CLICK.  IF NEGATIVE, ADVANCE; IF POSITIVE, DELAY.  THIS NUMBER
                                       ; IS TO BE ADDED TO CLICK_TIME (SEE ELSEWHERE) TO DETERMINE
                                       ; MA/B_XMIT_SEQ_TIME.  IF AN ADVANCE,
                                       ; MA/B_XMIT SEQ_TIME IS LOADED OUT OF THE BACKGROUND, TO ENSURE
                                       ; IT FIRES BEFORE THE CLICK (IF THE CLICK COMES EARLY, IT FIRES
                                       ; THEN).  IF A DELAY, BACKGROUND CLEARS THIS VALUE (PREVENTS
                                       ; PREFIRING) AND THE CLICK (LEVEL 2) INT LOADS THE DELAY.
;
;
MB_XMIT_LIVE_BUFF  DS.B 400H           ;UART "B" LIVE EVENT TRANSMIT BUFFER.
MB_XMIT_LIVE_IN    DS.W 1              ;BUFFER INPUT POINTER.
MB_XMIT_LIVE_OUT   DS.W 1              ;BUFFER OUTPUT POINTER.
MB_XMIT_LIVE_CNT   DS.W 1              ;BUFFER COUNT.
;
MB_XMIT_SEQ_BUFF   DS.B 800H           ;UART "B" SEQUENCE EVENT TRANSMIT BUFFER.
MB_XMIT_SEQ_IN     DS.W 1              ;BUFFER INPUT POINTER.
MB_XMIT_SEQ_OUT    DS.W 1              ;BUFFER OUTPUT POINTER.
MB_XMIT_SEQ_CNT    DS.W 1              ;BUFFER COUNT.
MB_XMIT_SEQ_GATE   DS.W 1              ;BUFFER GATE - IF = 0, SEQ EVENTS ARE HELD BACK PENDING
                                        ;NEXT 96TH-NOTE CLOCK.  IF > 0, INDICATES NUMBER OF
                                        ;96-TH NOTES FOR WHICH SEQUENCE EVENT TRANSMISSION NEED NOT
                                        ;BE HELD BACK (DEMARCATED BY TIMING BYTES (F8H) IN BUFFER).
MB_XMIT_SEQ_TIME   DS.W 1              ;TIMEOUT UNTIL SEQUENCE BUFFER IS RELEASED.  UNITS ARE REALTIME
                                        ;(LEVEL 3) INTS.  ONCE = 0, LEVEL 3 ENABLES UART AND SETS GATE
                                        ;HIGH.  BACKGROUND LOADS UP THIS TIMEOUT WHEN DONE PARSING A
                                        ;CLICK'S WORTH OF DATA.
MB_TIME_BUFF       DS.W 1              ;COUNTDOWN 'TILL NEXT BUFFER DUMP - OFFLOADED IN LEVEL3
MB_SEQ_ADVANCE DS.W    1               ;SEE ABOVE 'A' VERSION FOR DOC.
;
;
TC_RCV_BUFF    DS.B    400H            ;TIMING CHIP (6803) TO CPU INPUT BUFFER.
TC_RCV_IN      DS.W    1               ;BUFFER INPUT POINTER.
TC_RCV_OUT     DS.W    1               ;BUFFER OUTPUT POINTER.
TC_RCV_COUNT   DS.W    1               ;BUFFER COUNT.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; VOICE PARAMETER BLOCK ARRAY:
;
; 8 BLOCKS (ONE PER VOICE), EACH WITH COMMON BLOCK AND TWO SUB-BLOCKS.
; EACH BLOCK IS DEFINED WITH ITS OWN LABEL TO ALLOW FOR .IMPORT TABLE GENERATION.
;
V_BLK_00       DS.B    V_BLOCK_SIZE
V_BLK_01       DS.B    V_BLOCK_SIZE
V_BLK_02       DS.B    V_BLOCK_SIZE
V_BLK_03       DS.B    V_BLOCK_SIZE
V_BLK_04       DS.B    V_BLOCK_SIZE
V_BLK_05       DS.B    V_BLOCK_SIZE
V_BLK_06       DS.B    V_BLOCK_SIZE
V_BLK_07       DS.B    V_BLOCK_SIZE
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; GENERAL PURPOSE DISPOSABLE RAM AREA FOR PRE-SAMPLE BUFFER,
; SEQUENCE RECORD PROCESSES, DISK DIRECTORY MANIPULATIONS, ETC.
;
WASTELAND      DS.W    400H
WASTELAND_2    DS.W    400H
WASTELAND_3    DS.W    400H            ;WHAT THE HELL - WASTE, WASTE, WASTE ....
                                       ;LET'S BE PLENTY BIG ENOUGH FOR A DX7 BULK PATCH DUMP.
END_OF_WASTELAND EQU   *
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; MIDITC EVENT LIST ARRAY:
;
CUELIST_BLOCK
;
MIDITC_EVENT_LIST
;881025                  REPT 256             ;256 ENTRIES ALLOWED (hr mn sc fr type num {add. params * 4})
               .FOR COUNT = 1,256      ;256 ENTRIES ALLOWED (hr mn sc fr type num {add. params * 4})
               DS.B    10
               .ENDFOR
;
EVENT_LIST_COUNT DS.W  1               ;NUMBER OF EVENTS IN LIST
SYSTEM_STOP_TIME DS.L  1               ;TIME THAT WE ARE SUPPOSED TO STOP EXECUTING ANY MIDITC EVENT
;
CUE_BLK_SIZE   EQU     *-CUELIST_BLOCK      ;NUMBER OF BYTES SAVED FROM / LOADED TO CUELIST_BLOCK.
CUE_BLK_XTRA   EQU     6*512-CUE_BLK_SIZE   ;LEFTOVER WHEN BLOCK IS FIT INTO SIX 512-BYTE RECORDS.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; SMPTE TIME MEMORY
;
               .ALIGN 2
FORMER_HOUR    DS.L    1               ;NOW_TIME WHEN A NEW RUN OF MIDI TIME CODE (MTC) STARTS.  SINCE
;MTC TAKES 8 MESSAGES SPACED AT QUARTER-FRAMES TO ARRIVE, IS 2 FRAMES OLD BY THE TIME WE CAN MAKE A
;COMPARE - THUS, SAVING OF THE OLD.  TIME SAVED IS HOUR/MINUTE/SECOND/FRAME, FOR A COMPARE.L.
;
TEMP_HOUR      DS.B    1               ;HOLDING ZONE FOR MTC TIME WHILE WE RECEIVE AND ASSEMBLE IT.
TEMP_MINUTE    DS.B    1
TEMP_SECOND    DS.B    1
TEMP_FRAME     DS.B    1
;
SMPTE_NOW_HR   DS.B    1               ;CURRENTLY RECEIVED SMPTE TIME - HOURS
SMPTE_NOW_MN   DS.B    1               ;MINUTES
SMPTE_NOW_SC   DS.B    1               ;SECONDS
SMPTE_NOW_FR   DS.B    1               ;FRAMES
SMPTE_NOW_BT   DS.B    1               ;BITS
;
SMPTE_SYNC     DS.B    1               ;SET IF CURRENTLY UNDER SMPTE LOCK - CLEAR IF NOT/BROKEN.
;
               .ALIGN 2
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\SMPTE VARIABLES TO SAVE TO DISK BELOW\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;
; MESSAGE TO INHABITANTS OF THE FUTURE ....
; IF VARIABLES IN THIS BLOCK ARE NOT REARRANGED IN ANY WAY OTHER THAN TO
; ADD NEW ONES TO THE END OF THE LIST, THE NUMBER OF DISK-COMPATIBILTY
; HEADACHES WHICH MIGHT ARISE WHEN A NEW VERSION OF FIRMWARE IS RELEASED
; WILL BE GREATLY REDUCED - PLAY IT SMART, EH?
;
; ALSO, PLEASE REMEMBER - NO MORE THAN 256 BYTES IN THIS BLOCK - PERIOD.
;
SMPTE_BLOCK
;
SMPTE_NOW_TYPE DS.B    1               ;TYPE (24=24 FPS, 25=25 FPS, 30+128=30 df FPS, 30=30 ndf FPS
SMPTE_NOW_T_1  DS.B    1               ;TYPE (0=24 FPS, 1=25 FPS, 2=30 df FPS, 3=30 ndf FPS
               .ALIGN 2
SMPTE_START_HR DS.B    1               ;SET SMPTE START TIME - HOURS
SMPTE_START_MN DS.B    1               ;MINUTES
SMPTE_START_SC DS.B    1               ;SECONDS
SMPTE_START_FR DS.B    1               ;FRAMES
SMPTE_START_BT DS.B    1               ;BITS
               .ALIGN 2
SMPTE_P_I_HR   DS.B    1               ;SMPTE PUNCH-IN TIME - HOURS
SMPTE_P_I_MN   DS.B    1               ;MINUTES
SMPTE_P_I_SC   DS.B    1               ;SECONDS
SMPTE_P_I_FR   DS.B    1               ;FRAMES
SMPTE_P_I_BT   DS.B    1               ;BITS
               .ALIGN 2
SMPTE_P_O_HR   DS.B    1               ;SMPTE PUNCH-OUT TIME - HOURS
SMPTE_P_O_MN   DS.B    1               ;MINUTES
SMPTE_P_O_SC   DS.B    1               ;SECONDS
SMPTE_P_O_FR   DS.B    1               ;FRAMES
SMPTE_P_O_BT   DS.B    1               ;BITS
;
SMPTE_SET_UP_TYPE DS.B 1               ;SMPTE TYPE WE'RE EXPECTING
;
M_DEVICE_ID    DS.B    1               ;MIDITC DEVICE ID (00->7EH)
;
;
TC_DIVIDE      DS.B    1               ;IMAGE OF DIVIDE BYTE LAST SENT TO TIMING CHIP.  IS 00 aaaa bb
                                       ;    WHERE aaaa = CLOCK OUT DIVIDE, AND bb+1 = CLOCK IN DIVIDE
TC_MODE        DS.B    1               ;IMAGE OF MODE BYTE LAST SENT TO TC. aa b ccc dd, WHERE:
                                       ;    aa = TAPE SPEED, b = CLOCK OUT (1=SMPTE), ccc = CLOCK IN
                                       ;    MODE (0=INTERNAL, 1=MTC, 2=MIDI, 3=CLICK, 4=SMPTE), AND
                                       ;    dd = SMPTE TYPE (24/25/30df/30ndf)
               .ALIGN 2
CLOCK_IN_MODE  DS.W    1               ;AS IT SEZ - 0=INTERNAL, 1=MIDITC, 2=MIDI, 3=CLICK, 4=SMPTE
RAW_CLOCK_IN   DS.W    1               ; (WEIRD IMAGE OF ABOVE, USED BY DISPLAY ROTINES)
CLOCK_OUT_MODE DS.W    1               ;CLOCK OUT: 0->5 = 24,12,8,6,4,3,& 2 PPQN; 6 =SMPTE.
;
PUNCH_IN_BAR   DS.W    1               ;TIME RECORDING IS SUPPOSED TO START, IN BARS/CLICKS
PUNCH_IN_CLICK DS.W    1               ;
PUNCH_OUT_BAR  DS.W    1               ;  "      "      "     "     "  STOP,  "   "     "
PUNCH_OUT_CLICK DS.W   1               ;
;              NOTE - DO NOT SEPARATE _BAR & _CLICK!!! EXPECTING THEM TO BE A LONG WORD.
;
PUNCH_IN_ID    DS.W    1               ;IF TIME ENTERED VIA MIDITC, MUST MATCH THIS NUMBER TO DELETE
PUNCH_OUT_ID   DS.W    1
;
TAPE_SPEED_TYPE DS.W   1               ;0=NORMAL; 1=TWICE, 2=HALF
TAPE_SPEED_VARI DS.W   1               ;SIGNED VALUE ADDED TO BIT LENGTH IN THE TC.  BASED ON 1 =
                                       ; 500 nsec.  EDITING RANGE IS +/-20 % (INTERACTS WITH FPS TIMES)
               .ALIGN 2
;
SMPTE_BLK_SIZE EQU     *-SMPTE_BLOCK        ;NUMBER OF BYTES SAVED FROM / LOADED TO SMPTE_BLOCK.
SMPTE_BLK_XTRA EQU     512-SMPTE_BLK_SIZE   ;LEFTOVER WHEN BLOCK IS FIT INTO A 512-BYTE RECORD.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; MIDI VARIABLES - THAT IS, THOSE SAVED TO / LOADED FROM DISK:
;
; MESSAGE TO INHABITANTS OF THE FUTURE ....
; IF VARIABLES IN THIS BLOCK ARE NOT REARRANGED IN ANY WAY OTHER THAN TO
; ADD NEW ONES TO THE END OF THE LIST, THE NUMBER OF DISK-COMPATIBILTY
; HEADACHES WHICH MIGHT ARISE WHEN A NEW VERSION OF FIRMWARE IS RELEASED
; WILL BE GREATLY REDUCED - PLAY IT SMART, EH?
;
; ALSO, PLEASE REMEMBER - NO MORE THAN 256 BYTES IN THIS BLOCK - PERIOD.
;
MIDI_BLOCK
               .ALIGN 2
;
MIDI_MODE      DS.W    1               ;0=OFF, 1=OMNI, 2=POLY, 3=MAPPED
;
MIDI_IN_CHANNEL  DS.W  1               ;FOR POLY MODE RECEIVE CHECKING.  0->F.
MIDI_OUT_CHANNEL DS.W  1               ;FOR OMNI & POLY MODE OUT.  0->1F (1A -> 16B)
;
MIDI_ECHO_FLAG DS.W    1               ;SET = ECHO RECEIVED DATA BACK OUT
SONG_SEL_ENABLE  DS.W  1               ;SET = ALLOWED TO XMIT & RCV MIID SONG SELECT POINTER
HOLD_TO_ALT_FLAG DS.W  1               ;SET = MIDI HOLD PEDAL ROUTNED TO ALT PARAMS SWITCH
M_VOL_ROUT     DS.W    1               ;NEG = OFF, 0 = MAIN VOLUME, 1 = LEVEL
;
MOD_ROUT_0     DS.W    16              ;THESE ARE THE DESTINATIONS FOR ABOVE.  FFFF=OFF.
PWHL_ROUT_0    DS.W    16              ; 0=PITCH (ADD)     2=PAN (ADD)    4=LEVEL (ADD)
PRESSURE_ROUT_0  DS.W  16              ; 1=PITCH (INV)     3=PAN (INV)    5=LEVEL (INV)
CUR_MOD_ROUT   DS.W    1               ;ACTIVE ROUTING (LOADED FROM NEW PRESET)
CUR_PWHL_ROUT  DS.W    1
CUR_PRESSURE_ROUT DS.W 1
;
MOD_PIT        DS.W    1               ;MOST RECENT MOD WHEEL VALUE (IF ROUTED TO PITCH)
MOD_PAN        DS.W    1               ;  "     "    "    "     "     "    "    " PAN)
MOD_LEV        DS.W    1               ;  "     "    "    "     "     "    "    " LEVEL)
;
PWHL_PIT       DS.W    1               ;MOST RECENT PIT WHEEL VALUE (IF ROUTED TO PITCH)
PWHL_PAN       DS.W    1               ;  "     "    "    "     "     "    "    " PAN)
PWHL_LEV       DS.W    1               ;  "     "    "    "     "     "    "    " LEVEL)
;
PRESS_PIT      DS.W    1               ;MOST RECENT PRESSURE VALUE (IF ROUTED TO PITCH)
PRESS_PAN      DS.W    1               ;  "     "    "    "     "     "    "    " PAN)
PRESS_LEV      DS.W    1               ;  "     "    "    "     "     "    "    " LEVEL)
;
M_COM_PIT      DS.W    1               ;ALL ACTIVE PITCH MODS, ADDED, CLIPPED
M_COM_PAN      DS.W    1               ; "     "    PAN    "     "       "
M_COM_LEV      DS.W    1               ; "     "   LEVEL   "     "       "
;
M_PIT_ACT      DS.W    1               ;SET = NEW VALUE; USE FOR CHANGES
M_PAN_ACT      DS.W    1
M_LEV_ACT      DS.W    1
;
LEVEL_LEVEL_LEVEL DS.W 1               ;IF VOLUME ROUTED TO LEVEL, THIS IS THE MOST RECENT VALUE
PAN_PAN_PAN    DS.W    1               ;MOST RECENT PA CONTROLLER VALUE
;
MIDI_DEFAULT_VEL DS.W  1               ;IF 0, THEN USE MIDI VELOCITY.  ELSE, THIS IS THE DEFAULT
                                       ; TO SUBSTITUTE BOTH XMITTING AND RCVING (1->127).
;
CUR_MIDI_PROG  DS.W    1               ;CURRENT MIDI 'PRESET' FOR MAPPING KITS ONTO A POLY MODE KYBD.
L_MAP_0        DS.W    16              ;LEFT KIT/BANK (0->7) FOR PROG #1->16
R_MAP_0        DS.W    16              ;RIGHT KIT/BANK (0->7) FOR PROG #1->16
TRIG_FLAG_0    DS.W    16              ;TRIGGER MODE FLAG (0/1) FOR PROG #1->16
CUR_L_MAP      DS.W    1               ;CURRENTLY SELECTED LEFT MAP
CUR_R_MAP      DS.W    1               ;    "         "    RIGHT "
CUR_TRIG_FLAG  DS.W    1               ;    "         "    TRIG MODE FLAG
;
;***********************************************************************
;
;              H   H  EEEEE  Y   Y  !!
;              H   H  E       Y Y   !!
;              HHHHH  EEE      Y    !!
;              H   H  E        Y
;              H   H  EEEEE    Y    !!
;
;      THIS BLOCK IS FULL!!!   NO MORE, YA HEAR??!!!
;
;***********************************************************************
;
MIDI_BLK_SIZE  EQU     *-MIDI_BLOCK         ;NUMBER OF BYTES SAVED FROM / LOADED TO MIDI_BLOCK.
MIDI_BLK_XTRA  EQU     512-MIDI_BLK_SIZE    ;LEFTOVER WHEN BLOCK IS FIT INTO A 512-BYTE RECORD.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; STILL MORE MIDI VARIABLES - A MORE EVANESCENT LOT ....
; OR, IN PLAIN ING-GLISH, THESE GUYS ARE NOT SAVED TO DISK:
;
MIDI_ROUTINE_PENDING DS.L 1            ;ADDRESS OF ROUTINE TO JUMP TO WHEN HAVE NEW BYTE
;
;
LAST_STAT_BYTE DS.B    1               ;LAST STATUS BYTE RECEIVED (WHOLE) OVER MIDI
;
XMIT_TEMP_0    DS.B    1
XMIT_TEMP_1    DS.B    1               ;LOADING ZONE OF CONSECUTIVE BYTES TO THROW IN XMIT BUFFER
XMIT_TEMP_2    DS.B    1
XMIT_TEMP_3    DS.B    1
XMIT_TEMP_4    DS.B    1
;
;
MIDI_DATA_1    DS.B    1               ;RECENTLY RECEIVED MIDI DATA, HELD ONTO FOR ECHOIN
MIDI_DATA_2    DS.B    1               ;DO NOT SEPERATE THESE 2 BYTES
;
SOUND_XFER     DS.W    1               ;EQUALS SOUND (0=31) OR SEQUENCE (0->99) NOMBRE BEING XFERRED.
SEQ_XFER       DS.W    1
;
MIDI_MOD_SOURCE  DS.W  1               ;WHEN SETTING UP MIDI MODUALTIONS ROUTINGS, EQUALS THE
                                       ; SOURCE.  0=MOD WHEEL, 1=PITCH WHEEL, 3=PRESSURE.
MIDI_KEY_MAP   DS.W    1               ;BIT MAP OF 'PADS' OVER MIDI CURRENTLY ON
P_KEY_MAP      DS.L    1               ;BIT MAP OF PITCH KEYS CURRENTLY HELD DOWN OVER MIDI
FAKE_KEY_MAP   DS.W    1               ;ALTERED VERSION OF MIDI_KEY_MAP, FOR UPDATING PERFORMANCE EDITS
;
LAST_MIDI_CHANNEL DS.W 1               ;LAST MIDI CHANNEL INFO RECEIVED ON.  MAY BE PROCESSED (ROTATED)
LAST_MIDI_KEYNUM DS.W  1               ;  "    "  KEYNUM    "     "           "   "    "          "
LAST_MIDI_VELOCITY DS.W 1              ;  "    "  VELOCITY  "     "
;
LAST_PRESSURE  DS.W    1               ;LAST PRESSURE RECEIVED (FOR AUTOREPEAT)
LAST_MOD_WHL   DS.L    1               ; "   MOD WHEEL   "       "      "
;
PAD_RED        DS.W    1               ;TEMPORARY STORAGE OF ASSIGN_BLOCK PARAMETERS
SOUND_RED      DS.W    1
ALT_P_RED      DS.W    1
PITCH_RED      DS.W    1
PAN_RED        DS.W    1
LEVEL_RED      DS.W    1
;
MIDI_HOLDING_BUFF DS.L 8               ;LAST MIDI 8 NOTE ONS RECEIVED
MIDI_OFF_BUFF  DS.L    8               ; ABOVE, CONVERTED TO OFFS
M_HOLD_SLOT    DS.W    1               ;  NEXT SLOT OFFSET TO PLACE A NEW NOTE
;
CONTINUE_TIMER DS.W    1               ;TIMER (IN UNITS OF 96-TH NOTE CLICK INTERRUPTS) FOR
                                       ;DELAYED TRANSMISSION OF "CONTINUE" BYTE (0FBH) FOLLOWING
                                       ;MIDI SONG-POSITION POINTER TRANSMISSION.
;
;890314;
;890314SYSEX_BRAKE_PT DS.W    1               ;DURING MIDI SYS-EXCLUSIVE PLAYBACK, NUMBER OF BYTE PAIRS
;890314                                       ;INTO A MESSAGE AT WHICH WE APPLY THE BRAKES.
;890314SYSEX_GUVNOR   DS.W    1               ;DELAY PER PAIR OF SYS-EX BYTES, ONCE BRAKES ARE APPLIED.
;890314SYSEX_XMIT_CNT DS.W    1               ;USED TO COUNT NUMBER OF BYTE PAIRS SENT OUT DURING CURRENT
;890314                                       ;SYS-EX MESSAGE - LET'S HOPE IT STAYS BELOW 65,535!!!
;
;
;
SDS_SHAKE_STAT DS.B    1               ; counts bytes rcvd in SDS handshake msg.
SDS_SHAKE_CODE DS.B    1               ; when valid, reflects last h-s msg code.
SDS_STATE      DS.B    1               ; what's SDS up to at the moment?
SDS_PACKET_NUM DS.B    1               ; packet number being sent.
SDS_TIMER      DS.W    1               ; used for SDS timeout functions.
SDS_WORD_CNT   DS.L    1               ; tracks SDS progress per sample count.
;
                                       ; following are parameters received in a
                                       ; sample dump header and stored:
SDS_DH_SAMPLE  DS.W    1               ; sample number.
SDS_DH_PERIOD  DS.L    1               ; sample period (nanoseconds).
SDS_DH_LENGTH  DS.L    1               ; sample length in words.
SDS_DH_LOOPST  DS.L    1               ; loop start word number.
SDS_DH_LOOPEND DS.L    1               ; loop end word number.
SDS_DH_LOOPTYP DS.B    1               ; loop type.
SDS_DH_FORMAT  DS.B    1               ; data format (number of bits).
;
                                       ; following are derived from parameters
                                       ; received in a sample dump header:
SDS_RCV_MASK   DS.W    1               ; holds mask for clearing garbage bits.
SDS_RCV_WIDTH  DS.B    1               ; indicates number of bytes per word.
SDS_RCV_WRDPOS DS.B    1               ; indicates which byte of word we're on.
;
SDS_RCV_DATA   DS.W    1               ; temp store for assembling sample data.
;
                                       ; following are user settings:
SDS_MENU_SEL   DS.B    1               ; which SDS function (screen) to access.
SDS_MAN_OUT    DS.B    1               ; flag, indicates manual send.
SDS_OUT_NUM    DS.B    1               ; sample number for outgoing manual send.
SDS_MAN_REQ    DS.B    1               ; flag, indicates manual receive (req).
SDS_REQ_NUM    DS.B    1               ; sample number for outgoing request.
SDS_RCV_CTRL   DS.B    1               ; selects method of rcv dest assignment.
;
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; GLOBAL SEQUENCER SETUP VARIABLES WHICH ARE SAVED TO / LOADED FROM DISK:
;
; MESSAGE TO INHABITANTS OF THE FUTURE ....
; IF VARIABLES IN THIS BLOCK ARE NOT REARRANGED IN ANY WAY OTHER THAN TO
; ADD NEW ONES TO THE END OF THE LIST, THE NUMBER OF DISK-COMPATIBILTY
; HEADACHES WHICH MIGHT ARISE WHEN A NEW VERSION OF FIRMWARE IS RELEASED
; WILL BE GREATLY REDUCED - PLAY IT SMART, EH?
;
; ALSO, PLEASE REMEMBER - NO MORE THAN 256 BYTES IN THIS BLOCK - PERIOD.
;
SEQ_SYS_BLOCK
;
TAP_SLEW_AMOUNT DS.W   1               ;COUNT OF HOW MANY TAPS ARE SUPPOSED TO BE AVERAGED TOGETHER
                                       ; TO CALCULATE THE 'NEW', TAPPED RUNNING TEMPO.
;
TAP_DIV_FLAG   DS.W    1               ;SET IF TAPS ARE SUPPOSED TO BE EIGHTH NOTES (CLEAR=QUARTER)
TAP_START_FLAG DS.W    1               ;SET IF TAP-IN-TO-START IS ACTIVE
TAP_IN_COUNT   DS.W    1               ;NOMBRE OF TAPS BEFORE GOING "START!!!"
;
COUNT_IN_METHOD DS.W   1               ; 0 = COUNT IN OFF, 1 = METRONOME CLICKS IN AFTER PLAY HIT,
                                       ; 2 = USER IS SUPPOSED TO TAP TAP_SLEW_AMOUNT NUMBER OF TIMES.
;
CLICKS_PER_TAP DS.W    1               ;CLICKS IN EACH TAP (12 OR 24 - DEPENDS ON TAP_DIV_FLAG)
               DS.W    1               ;FORMERLY CLICKS_PER_TAP_LEFT, WHICH IS UNUSED.
CLICKS_TAP     DS.W    1               ;CLICKS IN CLICKS_PER_TAP * TAP_SLEW_AMOUNT
TAP_CLICKS_LEFT DS.W   1               ; ABOVE LEFT, FOR COUNT IN
;
AUTOCORRECT_TYPE DS.W  1               ;0->8 - CODED AUTOCORRECT TYPE (OFF,32T,32,16T,16,8T,8,4T,4)
SWING_AMT      DS.W    1               ;NUMBER OF CLICKS OF SWING
SWING_PER      DS.W    1               ;50->75 - SWING PERCENTAGE
;
;
RAW_OFFSET     DS.W    1               ;SIGNED NUMBER OF CLICKS AUTOCORRECT INTERVALS ARE SHIFTED
OFFSET_INDEX   DS.W    1               ; FULL-WAVE RECTIFIED VERSION OF ABOVE (NO NEG TBL OFFSETS)
;      NOTE - AUTOCORRECT SHIFT IS DECOMMISSIONED AS OF 23-JUN-87 ....
;
RAW_MET        DS.W    1               ;0->6 - AUTOCORRECT INTERVAL (OFF,16T,16,8T,8,4T,4)
MET_COUNT      DS.W    1               ; CLICKS EACH ABOVE REPRESENTS
NOW_MET_COUNT  DS.W    1               ;  CURRENTLY USED VALUE (DOWNLOADED AT BAR BOUNDRIES)
MET_COUNT_DOWN DS.W    1               ; CLICKS REMAINING TO NEXT MET CLICK
METRO_TONE     DS.W    1               ;HOW LONG TO LEAVE MET PULSE ON (A DBRA LOOP; 14 + THIS NOMBRE)
;
PHASE_LEN      DS.W    1               ;NUMBER OF STEPS OF AUTOCORRECT PHASE TBL (CLICKS/CORRECT * 2)
NOW_PHASE      DS.W    1               ; CURRENT STEP IN ABOVE
PHASE_LIST     DS.L    1               ; ADDRESS OF PHASE LIST TO REFERENCE (SEE FILE 'PHASES')
NEW_PHASE_LEN  DS.W    1
NEW_PHASE_LIST DS.L    1
;
CR_BAR         DS.W    1               ;LAST CHOSEN SIZE TO CREATE A SEQUENCE
NOW_TRACK      DS.W    1               ;0->7 - CURRENT TRACK EDITING/TO RECORD TO
LOOP_RECORD    DS.B    1               ;SET IF LOOPING RECORD MODE SELECTED
NOW_UART       DS.B    1               ;0/1 - UART A/B THAT NEW MIDI STUFF IS TAGGED AS GOING TO
;
;
; CONTROL VARIABLES FOR PROGRAMMABLE FOOTSWITCHES -
; ALSO PART OF DISK-LOADED/SAVED SEQ_SYS_BLOCK:
;
FTSW1_ACTION   DS.W    1               ;SWITCH-ON ACTION FOR FOOTSWITCH 1.
;
MIDI_MT_UART   DS.W    1               ;FLAG TO ENABLE TRANSMISSION OF MIDI REALTIME OVER UARTS
;                                      ;BIT 0=UART A ENABLED, BIT 1=UART B ENABLED
FTSW1_KIT      DS.W    1               ;KIT USED BY FOOTSWITCH 1 IN SOUND-TRIGGER MODE.
;
FTSW1_ALT_PRM  DS.W    1               ;ALT-PARAMS VALUE USED BY FOOTSWITCH 1 IN SOUND-TRIG MODE.
;
FTSW1_VELOCITY DS.W    1               ;VELOCITY USED BY FOOTSWITCH 1 IN SOUND-TRIGGER MODE.
;
               DS.W    1               ;FORMERLY FTSW1_PGM, WHICH DON'T EXIST NO MORE.
;
FTSW2_ACTION   DS.W    1               ;SWITCH-ON ACTION FOR FOOTSWITCH 2.
;
               DS.W    1               ;FORMERLY FTSW2_PAD, WHICH DON'T EXIST NO MORE.
;
FTSW2_KIT      DS.W    1               ;KIT USED BY FOOTSWITCH 2 IN SOUND-TRIGGER MODE.
;
FTSW2_ALT_PRM  DS.W    1               ;ALT-PARAMS VALUE USED BY FOOTSWITCH 2 IN SOUND-TRIG MODE.
;
FTSW2_VELOCITY DS.W    1               ;VELOCITY USED BY FOOTSWITCH 2 IN SOUND-TRIGGER MODE.
;
               DS.W    1               ;FORMERLY FTSW2_PGM, WHICH DON'T EXIST NO MORE.
;
;
CUE_BAR        DS.W    1               ;BAR START-FROM-CUE IS SUPPOSED TO START FROM
;
               DS.W    1               ;FORMERLY CUE_CLICK, WHICH IS UNUSED.
               DS.L    1               ;FORMERLY CUE_OVERALL_CLICK, WHICH IS UNUSED.
               DS.W    1               ;FORMERLY SONG_POS_PTR, WHICH IS UNUSED.
;
CUE_START      DS.B    1               ;SET IF SUPPOSED TO START FROM CUE.
               .ALIGN 2
;
;
; ANALOG TRIGGER-IN CONTROL VARIABLES:
;
TRIG_ACTION    DS.W    1               ;ROUTING OF TRIGGER INPUT (TAP SWITCH, PAD, NOTHING).
;
TRIG_KIT       DS.W    1               ;KIT USED BY TRIGGER-IN IF IN SOUND TRIGGER MODE.
;
TRIG_ALT_PRM   DS.W    1               ;ALT-PARAMS SETTING USED BY TRIG-IN IN SOUND TRIGGER MODE.
;
TRIG_VELOCITY  DS.W    1               ;FOR SOUND TRIG MODE, INDICATES SENSED VEL OR FIXED SETTING.
;
TRIG_VEL_DLY   DS.W    1               ;AMOUNT OF TIME ALLOWED FOR VELOCITY SENSE INTERVAL.
;
TRIG_HOLD_OFF  DS.W    1               ;DELAY AFTER TRIGGERING BEFORE LOOKING FOR NEXT TRIGGER.
;
TRIG_ON_THRESH DS.W    1               ;THRESHOLD WHICH MUST BE EXCEEDED BY TRIGGER_VALUE
                                       ;IN ORDER TO REGISTER TRIGGER-ON STATUS.
                                       ;NOTE:  ACTUAL VALUE IS IN L.S.BYTE, M.S.BYTE ALWAYS = 0.
TRIG_OF_THRESH DS.W    1               ;THRESHOLD BELOW WHICH TRIGGER_VALUE MUST FALL
                                       ;IN ORDER TO REGISTER TRIGGER-OFF STATUS -
                                       ;I.E., BEFORE ANOTHER "ON" CAN BE ALLOWED TO OCCUR.
                                       ;NOTE:  ACTUAL VALUE IS IN L.S.BYTE, M.S.BYTE ALWAYS = 0.
;
KIT_INDEX      DS.W    1               ;INDICATES CURRENTLY SELECTED KIT OR BANK OF PADS -
                                       ;    0-3  =    USER-PROGRAMMABLE KITS 1-4.
                                       ;    4-7  =    PRESET BANKS 1-4.
;
;
SOUND_SEQ_SWITCH DS.W  1               ;SET = DEALING WITH SEQUENCES (ie. DUMPS); CLEAR = SOUNDS
AUTORPT_MIDI_MOD DS.W  1               ; FOR REPLACING VELOCITY IN AUTOREPEAT MODES.  -1 = NO,
                                       ; 0 = MOD WHL, 1 = PRESSURE.
AC_TYPE        DS.W    1               ;CLEAR = DON'T AUTOCORRECT LATE NOTE OFFS; 1 = AUTO-C EVERYTHING
;
SEQ_BLK_SIZE   EQU     *-SEQ_SYS_BLOCK      ;NUMBER OF BYTES SAVED FROM / LOADED TO SEQ_SYS_BLOCK.
SEQ_BLK_XTRA   EQU     512-SEQ_BLK_SIZE     ;LEFTOVER WHEN BLOCK IS FIT INTO A 512-BYTE RECORD.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; VARIABLES USED IN TEMPO CALCULATIONS:
;
CUR_TEMPO_BPM  DS.W    1               ;CURRENT ACTIVE TEMPO, IN BPM*10 (400->2500)
CUR_T_BPM_8    DS.W    1               ; AS ABOVE, * 8 (HIGHER RES FOR A_R's)
CUR_TEMPO_USEC DS.W    1               ;CURRENT ACTIVE TEMPO IN usec/CLICK (62500->10000)
CUR_TEMPO_FPB  DS.W    1               ;CURRENT ACTIVE TEMPO IN FRAMES/BEAT*10 (RANGE INTERACTS w/ SMPTE)
;
INIT_TEMPO_USEC DS.W   1               ;SAME AS ABOVE, 'CEPT THE INITIAL TEMPO OF THE CURRENT SEQUENCE
INIT_TEMPO_BPM DS.W    1
INIT_TEMPO_FPB DS.W    1
;
REF_TEMPO_USEC DS.W    1               ;TAP-TIME IS RECORDED AS DELTAS AGAINST THE INITIAL TEMPO.
                                       ; OF COURSE, THE INITIAL TEMPO MAY BE CHANGED VIA A/R's.  SO,
                                       ; KEEP RECORD OF THESE CHANGES HERE.  NOTE THAT DOES NOT ALWAYS
                                       ; EQUAL CUR_TEMPO - TAP-TIMES ALSO MODIFY CUR_TEMPO, BUT DO NOT
                                       ; MODIFY THIS (WE CAN'T EAT OURSELVES...)
;
;     (INIT TEMPO USED FOR THIS)       ;USED IN TAP-TIME MODE - TAPPED BEATS ARE STORED AS A
                                       ; VARIANCE (DELTA) IN RELATION TO THIS REF TEMPO.  THEN,
                                       ; WHEN THE SEQUENCE IS ACTUALLY GOING, THIS REF TEMPO IS
                                       ; TAKEN AS A RATIO AGAINST THE CURRENT ACTIVE TEMPO, AND
                                       ; THEN TIMES THE DELTA TO FIGURE THE REAL VARIANCE.
;
ACCEL_RIT_BEATS DS.W   1               ;COUNT OF HOW MANY CLICKS THE CURRENT ACCELERANDO/RITARDO
                                       ; IS SUPPOSED TO COVER
ACCEL_RIT_B_LEFT DS.W  1               ;COUNTDOWN OF BEATS LEFT IN CURRENT ACCEL/RIT
ACCEL_RIT_DELTA DS.W   1               ;SIGNED NUMBER IN usec/CLICK OF HOW MUCH THE CURRENT A/R
                                       ; CHANGES THE CURRENT TEMPO EVERY BEAT
ACCEL_RIT_REM  DS.W    1               ;REMAINDER OF TOTAL A/R DIVIDED BY THE NUMBER OF BEATS.  IS
                                       ; USED AFTER THE LAST 'REAL' A/R BEAT/DELTA, TO MAKE SURE
                                       ; TEMPO ENDS UP DEAD ON.
;
QUARTER_COUNT  DS.W    1               ;LEVEL 2 COUNTS CLICKS, ROLLS AT 24 FOR QUARTER NOTES (24 ppqn)
;
TAP_SLEW_COUNT DS.W    1               ;HOW MANY TAPS IN A ROW WE'VE RECEIVED (SPECIAL ACTION IS
                                       ; NEEDED IF TAPS RECEIVED ARE FEWER THAN THE SLEW AMOUNT).
;
LAST_TAP_TIME  DS.L    1               ;TIME, BASED ON REAL-TIME CLOCK, THAT LAST TAP CAME IN.
LAST_TAP_LENGTH DS.L   1               ; NUMBER OF msec LAST TAP LASTED
TAP_TIME_START DS.L    1               ; WHEN (AGAINST REAL_LONG_TIME) WE ARE SUPPOSED TO KICK INTO PLAY
CLICK_TIME_START  DS.L 1               ; SIMILAR TO TAP_TIME_START:  REAL_LONG_TIME AT WHICH AN
                                       ; AUDIBLE MET CLICK IS SUPPOSED TO HAPPEN (FOR COUNT IN).
;
HITSTORY_1     DS.L    1               ;LENGTH (IN msec) OF LAST TAP (NOTE: DEFINED .L 'CAUSE EASES MATH)
HITSTORY_2     DS.L    1               ;LENGTH (IN msec) OF 2nd TO LAST TAP
HITSTORY_3     DS.L    1               ;LENGTH (IN msec) OF 3rd TO LAST TAP
HITSTORY_4     DS.L    1               ;LENGTH (IN msec) OF 4th TO LAST TAP
HITSTORY_5     DS.L    1               ;LENGTH (IN msec) OF 5th TO LAST TAP
HITSTORY_6     DS.L    1               ;LENGTH (IN msec) OF 6th TO LAST TAP
HITSTORY_7     DS.L    1               ;LENGTH (IN msec) OF 7th TO LAST TAP
HITSTORY_8     DS.L    1               ;LENGTH (IN msec) OF 8th TO LAST TAP
;
TAP_TEMPO_MODE_FLAG DS.W 1             ;SET IF RECORDING OF TAP TEMPO IS ACTIVE
TAP_TRACK_ON_FLAG DS.W   1             ;SET IF IN TAP TRACK MODE.
STARTED_TAPPING   DS.W   1             ;SET IF USER ACTUALLY STARTED RECORDING A TAP TRACK
BAR_OR_SMPTE_FLAG DS.W   1             ;SET IF SMPTE USED FOR PUNCH IN/OUT, CLEAR IF TO USE BAR NOMBRE.
;
OLD_MIDI_DEPTH DS.W    1               ;NUMBER OF MIDI NOTES CURRENTLY ON FROM THE SEQUENCER
NEW_MIDI_DEPTH DS.W    1               ;  "    "   "     "       "     "   "   LIVE PERFORMANCE
OLD_PAD_DEPTH  DS.W    1               ;  "    "  PAD EVENTS     "     "   "   THE SEQUENCER
NEW_PAD_DEPTH  DS.W    1               ;  "    "   "    "        "     "   "   LIVE PERFORMANCE
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
;              SEQUENCER OPERATIONAL VARIABLES
;
                .ALIGN 2
CURRENT_SEQUENCE DS.W  1               ;00->99 - CURRENT SEQUENCE WE BE DEALING WITH
FORMER_SEQUENCE  DS.W  1               ;00->99 - LAST SEQUENCE NOMBRE ACCEPTED
CUE_NEW_SEQ    DS.B    1               ;SET = WHEN (FORMER_)SEQUENCE DONE, LOAD & START CURRENT_SEQ.
               .ALIGN 2
;
TOTAL_BARS     DS.W    1               ;001->999 - TOTAL BARS IN CURRENT SEQUENCE
NOW_LAST_BAR   DS.W    1               ;001->999 - ABOVE, PLUS ONE IF AN 'EXCESS' BAR.
NOW_SEQ_STATUS DS.W    1               ;SET IF CURRENT_SEQUENCE HAS BEEN ALLOCATED.
;
NOW_BAR        DS.W    1               ;000->999 - CURRENT BAR OF CURRENT SEQUENCE
NOW_CLICK      DS.W    1               ;0->??? - CURRENT CLICK WITHIN CURRENT BAR WITHIN CURRENT SEQUENCE
;              NOTE - DO NOT SEPARATE _BAR & _CLICK!!! EXPECTING THEM TO BE A LONG WORD.
;
NOW_BEAT       DS.W    1               ; 1->DENOM - 'BEAT' WE'RE CURRENTLY ON.
EDIT_TRACK     DS.W    1               ; TEMP VERSIONS OF ABOVE FOR EDITING PURPOSES
;
EDIT_BAR       DS.W    1
EDIT_CLICK     DS.W    1
;              NOTE - DO NOT SEPARATE _BAR & _CLICK!!! EXPECTING THEM TO BE A LONG WORD.
;
EDIT_BEAT      DS.W    1
OVERALL_CLICK  DS.L    1               ;0->??? - CLICKS SINCE START OF SEQUENCE
NEXT_EVENT_TIME DS.W   1               ;CLICK THAT NEXT STUFF PRE-FETCHED FROM SEQUENCER HAPPENS
HOLDING_EVENT  DS.W    1               ;FIRST WORD OF FIRST EVENT PRE-FETCHED, TO HAPPEN AT NEXT_...
NOW_NUMERATOR  DS.W    1               ;0->63 - NUMERATOR OF CURRENT TIME SIG
RAW_DENOMINATOR DS.W   1               ;0->7 - CODED DENOW OF CURRENT TIME SIG (2,4,6,8,12,24, or 32)
NOW_DENOMINATOR DS.W   1               ;ABOVE, UNCODED TO 2/4/6/8/12/16/24/32
;
WROTE_NEW_TIME DS.B    1               ;FLAG WHETHER ANY DATA COPIED THIS CLICK, AND THEREFORE A TIME
                                       ; MARKER HAS BEEN CREATED - IF CLEAR, NO, AND NEW STUFF MUST
                                       ; BE PRECEEDED BY A TIME MARKER OF IT'S OWN.
TRACKS_MUTED   DS.B    1               ;BIT MAP OF SEQUENCER TRACKS MUTED (1=MUTED).
FORMER_MUTED   DS.B    1               ; THOSE PREVIOUSLY MUTED
SAFE_MUTED     DS.B    1               ; HOLDING ZONE FOR THE TRANSITION
PENDING_MUTE   DS.B    1               ; THOSE TRACKS TO BE MUTED OFF - AT A LATER TIME.
               .ALIGN 2
NEW_MUTE_TRACK DS.W    1
;
INT_ERASE_MAP  DS.L    2               ;64-BIT MAP OF INTERNAL SOUND/ALT NUMBERS FOR LIVE ERASE.
;
;
XPORT_STATE    DS.B    1               ;CURRENT STATE OF "TAPE TRANSPORT" CONTROLS -
                                       ;BITS MAPPED AS FOLLOWS ("1" = ACTIVE):
                                       ;D7 = INITIAL SYNC TO SMPTE (APPARENTLY NOT USED ....)
                                       ;D6 = PAUSE
                                       ;D5 = STOP (NOT USED - IF STOPPED, ALL BITS = 0)
                                       ;D4 = FAST-FORWARD
                                       ;D3 = PLAY
                                       ;D2 = REWIND
                                       ;D1 = RECORD
                                       ;D0 = ERASE
                                       ;NOTE THAT DEFINITIONS FOLLOW PHYSICAL LAYOUT OF ASSOCIATED
                                       ;SWITCHES.  NAMES FOR EACH BIT ARE DEFINED IN SEQDEFS:FRANK.
;
RECORDING      DS.B    1               ;SET IF RECORDING ACTUALLY ALLOWED
ERASING        DS.B    1               ;SET IF ERASING ACTUALLY ALLOWED TO OCCUR
SYSEX_COMING   DS.B    1               ;SET IF RECORDING A SYSEX MESSAGE - BLOCK PROCESSING NEXT CLICK
SEQ_XMIT_EVENT DS.B    1               ;SET IF EVENT BEING XMITTED IS SUPPOSED TO GO TO THE SEQ BUFFER
PROCESSED_TAP  DS.B    1               ;SET IF ALREADY PROCESSED A TAP_EVENT THIS CLICK (DO NO OTHERS)
SINGLE_STEP    DS.B    1               ;SET IF CURRENTLY SINGLE STEPPING
FOUND_CUE_BAR  DS.B    1               ;SET WHEN READ_TO_CUE_BAR HITS TARGET BAR (MESSAGE TO SELF).
BLEED_UART_A   DS.B    1               ;SET IF ACT_STOP EXECUTED - TELLS UARTS TO XMIT ALL REMAINING
BLEED_UART_B   DS.B    1               ; SEQUENCE MIDI, REGARDLESS OF GATE COUNTS.
CHASING_SMPTE  DS.B    1               ;THIS IS THE REAL "HI-SPEED SMPTE CHASE" FLAG.
CUEING_TO_SPP  DS.B    1               ;INDICATES HI-SPEED CUEING TO RECEIVED MIDI SONG POINTER.
PLAYED_TO_END  DS.B    1               ;FOR MIDI/SMPTE REMOTE CONTROL, INDICATES WE ROLLED PAST END
                                       ;OF SEQUENCE OR SONG, SO IGNORE SEQUENCER CLOCKS.
USER_PUNCHED   DS.B    1               ;INDICATES MANUAL PUNCH-IN/OUT DURING CURRENT RUN OF
                                       ;SEQUENCER - AUTO PUNCH IS DEFEATED, RECORD-LOOPING PLAY IS
                                       ;MAINTAINED EVEN WHILE PUNCHED OUT.
NEW_SONG_NOW   DS.B    1               ;CREATED AS A PATCH FOR SONG INSTALL ROUTINE -
                                       ;USED WHEN SONG INSTALL OCCURS WHILE TRANSPORT IS ACTIVE,
                                       ;TO TELL THAT ROUTINE THAT IT'S OKAY TO SET SONG REPEATS PER
                                       ;THE FIRST SONG STEP (EG, LOOPED SONG PLAYBACK OR SMPTE/SPP
                                       ;CUEING - NOT STILL IN THE MIDDLE OF PLAYING SOME SONG,
                                       ;WHEREAS HAND-CUEING OF A NEW SONG WHILE STILL PLAYING A
                                       ;SONG SHOULD NOT BE PERMITTED TO ALTER CURRENT REPEATS VALUE
                                       ; - LIKE ALL PATCHES, THIS ONE COVERS ONE MORE HOLE IN A
                                       ;BADLY CONCEIVED SYSTEM WHICH IDEALLY SHOULD BE THROWN OUT
                                       ;AND DONE OVER AGAIN TO AVOID THE PROBLEM ALTOGETHER).
               .ALIGN 2
;
CUR_SPP_CLICK  DS.L    1               ;STORES LAST-RECEIVED MIDI SONG-POINTER EXPANDED TO
                                       ;96-TH NOTE CLOCK FORM FOR OUR REFERENCE WHILE CUEING.
;
;
;
;30SEP;
;30SEPNOTE_REC_PARSE DS.L    1               ;THIS VECTOR TAKES THE PLACE OF SEQ_WRITE DURING RECORDING.
;30SEPOTRA_REC_PARSE DS.L    1               ; NOTE_ IS FOR NEW MIDI NOTES, OTRA_ IS FOR NEW 'OTHER' MIDI,
;30SEPPAD_REC_PARSE  DS.L    1               ; AND PAD_ IS FOR NEW PADS.  OLD_ IS FOR PREVIOUSLY RECORDED
;30SEPOLD_REC_PARSE  DS.L    1               ; DATA.  AS WITH SEQ_WRITE, PASS WORD (REMAINS PROTECTED) IN D7.
;30SEPNOTE_OFF_PARSE DS.L    1               ;
;30SEP;
;
; NOTE: ABOVE VECTOR CELLS SHORTENED TO .W AND RENAMED (FOR SAFETY):
;
MIDI_ON_WRITE  DS.W    1               ;VECTOR FOR RECORDING MIDI NOTE-ONS.
PAD_ON_WRITE   DS.W    1               ;VECTOR FOR RECORDING PAD NOTE-ONS.
NOTE_OFF_WRITE DS.W    1               ;VECTOR FOR RECORDING MIDI/PAD NOTE-OFFS.
NON_NOTE_WRITE DS.W    1               ;VECTOR FOR RECORDING NON-NOTE (NON-AUTOCORRECTED) EVENTS.
OLD_SEQ_WRITE  DS.W    1               ;VECTOR FOR COPY-OVER OF EXISTING SEQ DATA DURING RECORD.
;
;
;
LAST_PHASE     DS.W    1               ;THE NUMBER OF THE LAST PHASE THAT WAS (0-4, AS IN ....)
                                       ; THIS VECTOR LOADED BY THE RECORDING PHASE ROUTINES IN PRO_CLICK.
;
CLICKS_THIS_BAR DS.W   1               ;NUMBER OF CLICKS THIS BAR
CLICKS_THIS_DENOM DS.W 1               ;NUMBER OF CLICKS IN CURRENT DENOMINATOR
;
TO_SEQ_NUM      DS.W   1               ;DESTINATION SEQUENCE IN EDITING FUNCTIONS
FROM_SEQ_NUM    DS.W   1               ;SOURCE SEQUENCE # IN EDITING FUNCTIONS
TO_TRACK_NUM    DS.W   1               ;DESTINATION TRACK # IN EDITING FUNCTIONS
FROM_TRACK_NUM  DS.W   1               ;SOURCE TRACK # IN EDITING FUNCTIONS
S_FROM_BAR      DS.W   1               ;SOURCE "FROM" BAR NUMBER
S_THRU_BAR      DS.W   1               ;SOURCE "THRU" BAR NUMBER
D_FROM_BAR      DS.W   1               ;DESTINATION "FROM" BAR NUMBER
D_THRU_BAR      DS.W   1               ;DESTINATION "THRU" BAR NUMBER
WL_FROM_BAR     DS.W   1               ;WORK LOOP "FROM" BAR NUMBER
WL_THRU_BAR     DS.W   1               ;WORK LOOP "THRU" BAR NUMBER
WL_FROM_SEQ     DS.W   1               ;STORAGE OF WORK LOOP SEQ NUMBER
WL_TO_SEQ       DS.W   1               ;STORAGE OF WORK LOOP SEQ NUMBER
TRANS_AMT       DS.W   1               ;TRANSPOSE AMOUNT
SCALE_AMT       DS.W   1               ;VELOCITY SCALE AMOUNT
CHAN_NUM        DS.W   1               ;MIDI CHANNEL # IN SEQ EDIT FUNCTIONS
DATA_TYPE       DS.W   1               ;DATA TYPE FOR ERASE FUNCTION
LAST_MIDI       DS.W   1               ;LAST MIDI KEY PLAYED
OLD_LAST_MIDI   DS.W   1               ;PREVIOUS LAST MIDI KEY PLAYED
STAT_TEMP       DS.W   1               ;STORAGE OF MIDI STAT BYTE DURING AUTOREPEAT
MIDI_DATA_TEMP  DS.W   1               ;STORAGE OF MIDI DATA DURING AUTOREPEAT
BNC_TRK_NUM     DS.W   1               ;TRACKS TO BE BOUNCED DOWN IN SEQ BOUNCE FUNCTION
SONG_EVENT      DS.W   1               ;EVENT TYPE FOR SONG SUB FUNCTION
SONG_STEP_NUM   DS.W   1               ;CURRENT STEP NUMBER IN SONG
SONG_FUNC       DS.W   1               ;CURRENT FLAG FOR SEQ# OR TRACK MUTE FUNCTION
SONG_RPT_NUM    DS.W   1               ;NUMBER OF REPEATS FOR CURRENT SEQUENCE IN SONG
SONG_SEQ_NUM    DS.W   1               ;SEQUENCE # IN SONG STEP FUNCTION
CURRENT_SONG    DS.W   1               ;CURRENT SONG NUMBER 0-11
XFADE_LEN       DS.L   1               ;XFADE LOOP LENGTH VARIABLE
SUB_FIRST_TIME  DS.W   1               ;FLAG TO INDICATE FIRST PASS THROUGH A SUBFUNCTION
SONG_UNBUILD_FLAG DS.W 1               ;FLAG THAT SEZ IN SONG_BUILD & HAVE UNBUILT UPON ENTRY
;
S_OR_S_FLAG    DS.W    1               ;0=SEQUENCE PLAYBACK, 1=SONG.
TOTAL_REPEATS  DS.W    1               ;TOTAL REPEATS OF CURRENT SEQUENCE IN CURRENT SONG
REPEATS_LEFT   DS.W    1               ; (OBVIOUS, FROM LABEL NAME & ABOVE)
TOTAL_SONG_EVENTS DS.W 1               ;TOTAL EVENTS IN CURRENT SONG
;
WASTELAND_DEPTH DS.W   1               ;NUMBER OF WORDS OF EVENTS BUFFERED IN WASTELAND, AS PART
                                       ; OF RECORDING.
;
REPEAT_START   DS.W    1               ;STARTING BAR NUMBER FOR CURRENT REPEAT LOOP (0 IF NO LOOP).
;
REPEAT_END     DS.W    1               ;ENDING BAR NUMBER FOR CURRENT REPEAT LOOP (0 IF NO LOOP).
;
REPEAT_COUNT   DS.W    1               ;PENDING REPEAT COUNT FOR CURRENT REPEAT LOOP -
                                       ;0 IF NONE (GETS US OUT OF LOOP IF IN ONE), 0FFFFH IF DOING
                                       ;INFINITE REPEAT (FOOTSWITCH SAVE US FROM ETERNAL DAMNATION)
                                       ;OR = NUMBER OF TIMES WE WILL REPEAT THE LOOPED SEGMENT -
                                       ;AFTER PLAYING THROUGH IT ONCE.
;
READY_TO_RPT   DS.B    1               ;FLAG, INDICATES PLAYBACK HAS PASSED REPEAT START POINT AND
                                       ;ALL NECESSARY START-POINT STATUS HAS BEEN RECORDED.
;
NOW_REPEATING  DS.B    1               ;FLAG, INDICATES WE ARE CURRENTLY DOING A REPEAT PLAYBACK OF
                                       ;LOOPED SECTION USING NON-DESTRUCTIVE READ.
;
RP_ST_CUR_TEMP DS.W    1               ;CUR_TEMPO_USEC VALUE AT BEGINNING OF REPEAT LOOP.
;
RP_ST_CUR_T_8  DS.W    1               ;CUR_T_BPM_8 VALUE AT BEGINNING OF REPEAT LOOP.
;
RP_ST_REF_TEMP DS.W    1               ;REF_TEMPO_USEC VALUE AT BEGINNING OF REPEAT LOOP.
;
RP_ST_AR_B_LFT DS.W    1               ;ACCEL_RIT_B_LEFT VALUE AT BEGINNING OF REPEAT LOOP.
;
RP_ST_AR_DELTA DS.W    1               ;ACCEL_RIT_DELTA VALUE AT BEGINNING OF REPEAT LOOP.
;
RP_ST_AR_REM   DS.W    1               ;ACCEL_RIT_REM VALUE AT BEGINNING OF REPEAT LOOP.
;
RP_ST_MA_ADV   DS.W    1               ;MA_SEQ_ADVANCE VALUE AT BEGINNING OF REPEAT LOOP.
;
RP_ST_MB_ADV   DS.W    1               ;MB_SEQ_ADVANCE VALUE AT BEGINNING OF REPEAT LOOP.
;
RP_ST_M_DEPTH  DS.W    1               ;NUMBER OF MIDI NOTE-ONS STASHED IN RP_ST_MIDI_ON BUFFER.
;
RP_ST_P_DEPTH  DS.W    1               ;NUMBER OF PAD NOTE-ONS STASHED IN RP_ST_PADS_ON BUFFER.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; SOUND/KIT EDITING, PERFORMANCE AND STATE VARIABLES:
;
               .ALIGN 2
;
CURRENT_SOUND  DS.W    1               ;NUMBER OF LAST SOUND PLAYED BY LIVE EVENT
                                       ;OR SELECTED VIA AN EDIT FUNCTION.
LAST_CUR_SOUND DS.W    1               ;USED BY BACKGROUND TO DETECT CHANGES IN CURRENT_SOUND
                                       ;AND RESPOND TO THEM AS APPROPRIATE.
;
ALT_PARAM_FLAG DS.W    1               ;ALTERNATE PARAMETER STATUS - REFLECTS THAT OF MOST RECENTLY
                                       ;PLAYED LIVE SOUND, OR STATUS MOST RECENTLY SELECTED VIA
                                       ;EDITING SCREEN OR ALT-PARAMS SWITCH TOGGLE -
                                       ; 0 = "NORMAL" PARAMS, 1 = ALTERNATE PARAMS.
LAST_ALT_PARAM DS.W    1               ;USED BY BACKGROUND TO DETECT CHANGES IN ALT_PARAM_FLAG
                                       ;AND RESPOND TO THEM AS APPROPRIATE.
;
PAD_JUST_HIT   DS.W    1               ;INDICATES NUMBER (0-7) OF MOST RECENTLY HIT PAD.
;
LAST_PAD_HIT   DS.W    1               ;LAST VALUE OF PAD_JUST_HIT SEEN BY LOW-PRIORITY BACKGROUND.
;
HI_LO_RES_FLAG DS.W    1               ;FLAG IF IN HIGH OR LOW RESOLUTION MODES FOR SAMPLE EDITING.
                                       ;LOW RESOLUTION (0) MEANS TRAVELING BY ZERO CROSSINGS.
                                       ;HIGH RESOLUTION (1) MEANS MOVING ONE WORD AT A TIME.
;
DEL_REC_SOUND  DS.W    1               ;HOLDING ZONE OF SOUND NUMBER FOR DELETE, RECOVER MEMORY -
                                       ;00->31 MEANS THAT SPECIFIC SOUND; 32 MEANS ALL SOUNDS.
;
TO_MIX_PER     DS.W    1               ;FOR SAMPLE MIX - RELATIVE MIX FOR DESTINATION ("TO") SOUND
                                       ;AS A PERCENTAGE (1-99) OF ORIGINAL LEVEL - THE OTHER SOUND
                                       ;IS MIXED IN AT (100-TO_MIX_PER) PERCENT OF ORIGINAL LEVEL.
;
VCF_VCA_FLAG   DS.W    1               ;FLAG IF EDITING VCF (=0) OR VCA (=1) PARAMETERS.
;
LEV_TIME_FLAG  DS.W    1               ;SELECT LEVEL OR TIME EDIT IN SUSTAIN VEL-TRACK SCREEN.
;
COPY_FROM_NUM  DS.W    1               ;SOURCE SOUND NUMBER FOR MERGE, MIX, COPY/APPEND FUNCTIONS.
;
EDIT_KIT_INDEX DS.W    1               ;INDEX OF KIT EDITED IN KIT-BUILD SCREEN.
;
TARGET_KIT     DS.W    1               ;TARGET/DESTINATION KIT FOR KIT COPY/REPLACE/CLEAR.
;
SND_TO_REPLACE DS.W    1               ;INDICATES SOUND TO REPLACE IN KIT REPLACE SUBFUNCTION.
;
KIT_CLR_SEL    DS.W    1               ;INDICATES WHICH PARAMS TO CLEAR IN KIT CLEAR SUBFUNCTION.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; THIS-ALL STUFF HAS TO DO WITH DISK OPERATIONS -
; MOS'LY JES' CONTROLS WHAT THE USER DOES SET FOR HIS OR HER SELF:
;
DRIVE_SEL      DS.W    1               ;INDICATES WHICH DISK DRIVE TO USE (FLOPPY OR SCSI n).
;
BANK_SEL       DS.W    7               ;FOR SCSI DISK - INDICATES WHICH STORAGE BANK TO ACCESS -
                                       ;ONE VALUE PER EACH OF SCSI CHANNELS 0-6.
;
LOAD_INFO_SEL  DS.W    1               ;INDICATES WHICH FILE TO LOAD FROM DISK.
;
SAVE_INFO_SEL  DS.W    1               ;INDICATES WHICH FILE TO SAVE TO / VERIFY ON DISK.
;
UNIT_INFO_SEL  DS.W    1               ;INDICATES INFO TYPE (SOUND/SEQ/PGM) FOR UNIT MOVE.
;
SAVE_VER_SEL   DS.W    1               ;TOGGLE BETWEEN SAVE AND VERIFY IN SAME SCREEN.
;
SND_UNIT_SEL   DS.W    1               ;FOR ONE-SOUND LOAD, INDICATES SOURCE SOUND NUMBER.
;
SEQ_UNIT_SEL   DS.W    1               ;FOR ONE-SEQUENCE LOAD, INDICATES SOURCE SEQUENCE NUMBER.
;
SONG_UNIT_SEL  DS.W    1               ;FOR ONE-SONG TRANSFER, INDICATES DISK SONG NUMBER.
;
DIR_INFO_SEL   DS.W    1               ;SELECT SOUNDS/SEQUENCES/SONGS FOR DIRECTORY DISPLAY.
;
DIR_SHOW_SEL   DS.W    1               ;NUMBER OF SOUND OR SEQUENCE DISPLAYED IN DIRECTORY SCREEN.
;
DISK_UTIL_SEL  DS.W    1               ;INDICATES SELECTED DISK UTILITY.
;
BANK_NAME_SEL  DS.W    1               ;SELECTS SOUND OR SEQ BANK NAME FOR DISPLAY/EDITING.
;
PROTECT_SEL    DS.W    1               ;SELECTS CHECK/SET/CLEAR SCSI BANK WRITE-PROTECT SWITCH.
;
NEW_SCSI_ID    DS.W    1               ;INDICATES NEW SCSI ID TO BE ASSIGNED TO A DATAFRAME DRIVE.
;
;900424
;900424NEW_DRIVE_SIZE DS.W    1               ;INDICATES DATA CAPACITY OF DRIVE RECEIVING NEW DIRECTORY.
;900424
;
new_drive_type ds.w    1               ; indicates general category of SCSI
                                       ; drive receiving directory init.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; MISCELLANEOUS COLLISON COUNTERS AND BLOCKS:
;
               .ALIGN 2
;
L_3_COLLIDE    DS.W    1               ;NUMBER OF LEVEL 3 (REALTIME) INTS WAITING TO COMPLETE
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; ASSORTED 'REAL_TIME' AND TIMING INDICATORS.  'REAL_TIME' IS A ROTATING 16-BIT VALUE, INCREMENTED
; BY THE LEVEL 3 (ODDLY ENOUGH, 'REALTIME') INT EVERY 1.024 msec.
;
REAL_LONG_TIME DS.W    1               ;THIS & REAL_TIME FORM AN INCREDIBLY LONG TIMEOUT INDICATOR.
REAL_TIME      DS.W    1               ;THE TIME IT IS.
;
OLD_REALTIME   DS.W    1               ;LAST TIME ROTATING_SPINE WENT THOUGH THE TOP
;
LAST_CLICK_HIT DS.L    1               ;THE TIME THE LAST 24 PPQN CLICK OCCURED (UPDATED BY LEVEL 2 INT).
NEXT_TIME      DS.L    1               ;THE TIME THE NEXT 24 PPQN CLICK IS EXPECTED.
                                        ;EITHER PROJECTED BY LEVEL 2 (IF UNDER .IMPORT CLOCK) OR
                                        ;UPDATED BY THE SEQUENCE READER (WHICH ULTIMATELY TELLS THE
                                        ;6803 TIMING CHIP WHEN THE NEXT CLICK IS SUPPOSED TO OCCUR).
LAST_CLICK_LENGTH DS.L 1               ;THE DIFFERENCE BETWEEN LAST_TIME AND NEXT_TIME
                                        ;UPDATED BY LEVEL 2; SEQUENCE READER UPDATES IF IT KNOWS
                                        ;BETTER (SEE COMMENT BY 'NEXT_TIME').
;
RECORD_LOOPING DS.W    1               ;FLAG THAT RECORDING, AND PRESENTLY LOOPING.
;
copypro_key    ds.l    1          ; used in conjunction with copy protection.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; VARIABLES RELATED TO FUNCTION SWITCH RESPONSE:
;
CUR_FUN_INDEX  DS.W    1               ;SWITCH NUMBER OF MOST RECENTLY HIT FUNCTION SWITCH.
CUR_SUB_INDEX  DS.W    1               ;INDICATES CURRENT SUBFUNCTION (AS A LONGWORD TABLE OFFSET).
CUR_FLD_INDEX  DS.W    1               ;INDICATES CURRENT OPEN FIELD (AS A ???????? ????? ??????).
CUR_SUB_BLOCK  DS.L    1               ;LONGWORD POINTER TO CURRENT SUBFUNCTION BLOCK.
SUB_INDEXES    DS.W    24              ;INDEX OF MOST RECENT ACTIVE SUBFUNC UNDER EACH FUNC SWITCH.
FLD_INDEXES    DS.W    24              ;INDEX OF MOST RECENT OPEN FIELD UNDER EACH FUNCTION SWITCH.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; MISCELLANEOUS SMALL BUFFERS AND ARRAYS:
;
SCREEN_BUFFER  DS.W    16              ;BUFFER FOR ASSEMBLING/WRITING LCD MESSAGE STRINGS.
BCD_DIGITS     DS.B    8               ;DESTINATION BUFFER FOR BINARY TO ASCII BCD CONVERSION.
NAME_BUFFER    DS.B    8               ;BUFFER FOR SOUND NAME EDITING.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; VARIABLES RELATED TO FRONT-PANEL AT LARGE:
; (YEAH, IT'S COMPLICATED!)
;
SWITCH_STAT    DS.B    8               ;IMAGE OF LATEST SWITCH STATUS (AFTER MASK-OFF PROCESSING).
SWITCH_MASK    DS.B    8               ;IMAGE OF SWITCHES WHICH ARE TO BE IGNORED BY SWITCH_SCAN.
SWITCHES_ON    DS.B    8               ;IMAGE OF SWITCHES WHICH HAVE BEEN CLOSED AND ARE
                                       ;AWAITING PROCESSING BY BACKGROUND SWITCH HANDLER.
SWITCH_HIT     DS.W    1               ;WHEN A SWITCH CLOSURE IS DETECTED, ITS CODE IS PASSED FROM
                                       ;SWITCH_BOY TO SWITCH_HITTER IN THIS VAR.
;
DEBOUNCE_TIMER DS.W    1               ;TIMER FOR SWITCH_SCAN DEBOUNCE DELAY (PER REAL_TIME).
;
SCROLLING      DS.W    1               ;IF NOT = 0, SCROLLABLE SWITCH IS DOWN - INDICATES SWITCH #.
SCROLL_TIMER   DS.W    1               ;TIMER FOR AUTO-SCROLL REPEAT INTERVAL.
SCROLL_PERIOD  DS.W    1               ;CURRENT VALUE OF AUTO-SCROLL REPEAT INTERVAL (REAL_TIME).
SCROLL_COUNT   DS.W    1               ;NUMBER OF REPEATS DURING CURRENT AUTOSCROLL -
                                       ;USED TO AUTO-ACCELERATE THE SCROLL RATE.
;
SCRN_DM_TIMER  DS.W    1               ;TIMER FOR SCREEN_DAEMON - DELAY FOR WRITING DAEMON_SCREEN.
SCRN_DM_PERIOD DS.W    1               ;CURRENT VALUE OF SCREEN_DAEMON DELAY.
ED_BLOCK_TIMER DS.W    1               ;WHILE ACTIVE, PERF EDITS SWALLOWED - E.G. AFTER DISK LOAD.
;
;
FAST_WIND_BAR  DS.W    1               ;TEMP-STORE OF FAST-WIND/PLAY-FROM CUE TARGET BAR NUMBER.
FAST_WIND_TIMER  DS.W  1               ;FAST-WIND SWITCH RELEASE TIMER TO TRIGGER CUEING.
MUTE_OFF_TIMER DS.L    1               ;HELUVA LIKE ABOVE, 'CEPT FOR PENDING KILLING OF NOTES JUST MUTED
PLAY_BLINK_TIMER DS.W  1               ;TIMEOUT FOR BRIEF "PLAY" LED SNUFF AT TOP OF SEQUENCE/LOOP.
LCD_TIMER      DS.L    1               ;AT THIS TIME, PLUS 5 MINUTES, TURN OFF THE BACKLIGHT.
;
LED_OUT_STAT   DS.W    1               ;MOST RECENT OUTPUT TO LED_OUTPUT REGISTER, SANS INVERSION.
LED_STEADY     DS.W    1               ;IMAGE OF LEDs IN STEADY "ON" STATE.
LED_SLOW_FLASH DS.W    1               ;IMAGE OF LEDs IN SLOW-FLASH MODE.
LED_FAST_FLASH DS.W    1               ;IMAGE OF LEDs IN FAST-FLASH MODE.
LED_EXTINGUISH DS.W    1               ;IMAGE OF LEDs TO BE TURNED OFF (MODE-INDEPENDENT).
SLOW_LED_TIMER DS.W    1               ;TIMER FOR LED SLOW-FLASH.
FAST_LED_TIMER DS.W    1               ;TIMER FOR LED FAST-FLASH.
SLOW_LED_STAT  DS.B    1               ;FLAG TO INDICATE ON/OFF STATUS OF SLOW-FLASH GROUP.
FAST_LED_STAT  DS.B    1               ;FLAG TO INDICATE ON/OFF STATUS OF FAST-FLASH GROUP.
;
CURSOR_ENABLE  DS.B    1               ;FLAG - INDICATES BLINKING LCD CURSOR ENABLED.
CURSOR_STAT    DS.B    1               ;FLAG - INDICATES CURRENT STATUS OF LCD CURSOR.
CURSOR_TIMER   DS.W    1               ;TIMER FOR BLINKING LCD CURSOR.
;
;
CUR_FLD_BLOCK  DS.L    1               ;LONGWORD POINTER TO CURRENT FIELD BLOCK.
FLD_INDEX_STEP DS.W    1               ;INDICATES CURRENT FIELD SCROLL DIRECTION.
TEMP_FLD_INDEX DS.W    1               ;TEMP-STORE OF TRIAL FIELD INDEX DURING EDIT FIELD SEARCH -
                                       ;ALSO TRACKS PROGRESS DURING WRITE_ALL_FIELDS.
STOP_FLD_INDEX DS.W    1               ;VALUE OF FIELD INDEX AT WHICH EDIT FIELD SEARCH HAS GOTTEN
                                       ;STUCK IN AN INFINITE LOOP - HERE WE STOP.
INST_TSK_INDEX DS.W    1               ;PROGRESS-TRACKING VARIABLE FOR PIECEWISE INSTALLATION OF
                                       ;SUBFUNCTION - INDICATES CURRENT INSTALL TASK.
;
CURSOR_RGT_VEC DS.L    1               ;VECTOR FOR CURSOR-RIGHT SWITCH.
CURSOR_LFT_VEC DS.L    1               ;VECTOR FOR CURSOR-LEFT SWITCH.
INCREMENT_VEC  DS.L    1               ;VECTOR FOR INCREMENT SWITCH.
DECREMENT_VEC  DS.L    1               ;VECTOR FOR DECREMENT SWITCH.
ENTER_VEC      DS.L    1               ;VECTOR FOR ENTER SWITCH.
EDIT_VEC       DS.L    1               ;VECTOR FOR ACTION TO ACCOMPANY PARAMETER EDIT AND STORE.
POT_CHANGE_VEC DS.L    1               ;VECTOR FOR RESPONSE TO CHANGE ON DATA SLIDER.
;
PARAM_BUFFER   DS.L    1               ;BUFFER FOR PARAMETER BEING EDITED/DISPLAYED.
PARAM_POINTER  DS.L    1               ;POINTER TO PARAMETER BEING EDITED/DISPLAYED.
AUX_ED_PTR_1   DS.L    1               ;AUXILLIARY POINTER FOR USE BY DISPLAY/EDIT PROCEDURES.
AUX_ED_PTR_2   DS.L    1               ;SEE ABOVE.
PARAM_LO_LIM   DS.L    1               ;PARAMETER-EDIT LOWER LIMIT VALUE.
PARAM_HI_LIM   DS.L    1               ;PARAMETER-EDIT UPPER LIMIT VALUE.
;
DISPLAY_VEC    DS.L    1               ;POINTER TO PARAMETER DISPLAY ROUTINE.
DISPLAY_OFFSET DS.L    1               ;CONTAINS PARAMETER DISPLAY OFFSET VALUE.
DISPLAY_SCALE  DS.W    1               ;CONTAINS PARAMETER DISPLAY SCALE FACTOR.
DISP_STRNG_PTR DS.L    1               ;POINTER TO INDEXED STRING ARRAY FOR PARAMETER DISPLAY.
;
DECIMAL_POINT  DS.W    1               ;IF NOT = 0, DECIMAL POINT IS INSERTED N DIGITS FROM RIGHT.
GUIDO_COUNT    DS.W    1               ;NUMBER OF (ADD'TL) KEYPAD STROKES NEEDED TO FILL FIELD,
                                       ;WHILE DECIMAL KEYPAD ENTRY IN PROGRESS (GUIDO_IS_AWAKE).
GUIDO_TIMER    DS.W    1               ;TIMER FOR DISPLAY BLINK IN DECIMAL KEYPAD ENTRY FIELD.
;
ZERO_BLANKING  DS.B    1               ;FLAG - INDICATES LEADING-ZERO BLANKING IN EFFECT.
STRING_AT_MIN  DS.B    1               ;IF NOT = 0, WRITE STRING INSTEAD OF PARAM VALUE AT MINIMUM.
STRING_AT_MAX  DS.B    1               ;IF NOT = 0, WRITE STRING INSTEAD OF PARAM VALUE AT MAXIMUM.
SIGN_CHAR      DS.B    1               ;TEMP STORE OF SIGN CHARACTER DURING SIGNED NUMBER DISPLAY.
LINKED_PARAM   DS.B    1               ;FLAG - INDICATES OTHER FIELD(S) AFFECTED BY SETTING IN
                                       ;CURRENT FIELD - ALL FIELDS REDISPLAYED UPON VALUE CHANGE.
;
REDISP_FIELD   DS.B    1               ;FLAG - REQUEST FOR REDISPLAY OF VALUE IN CURRENT LCD FIELD.
UPDATE_LCD     DS.B    1               ;FLAG - REQUEST FOR UPDATE OF ENTIRE LCD FROM SCREEN_BUFFER.
POSITION_CURS  DS.B    1               ;FLAG - REQUEST TO POSITION CURSOR NORMALLY IN CURRENT FIELD
                                       ;WITHOUT REDISPLAYING THE FIELD VALUE ITSELF.
SUBFUN_INSTALL DS.B    1               ;FLAG - REQUEST DISPLAY/REDISPLAY OF ALL PARAMETER FIELDS IN
                                       ;CURRENT SUBFUNCTION, INSTALL EDIT HOOKS FOR CURRENT FIELD.
NO_POT_CLEAR   DS.B    1               ;BLOCKS CLEARING OF DATA POT DURING INSTALL_SUBFUNCTION -
                                       ;USED WHEN REDISPLAYING SAME SCREEN AND FIELD IN RESPONSE
                                       ;TO EDITS IN A FIELD WHICH HAS OTHER FIELDS LINKED TO IT.
;
WR_FIELDS_FLAG DS.B    1               ;INDICATES PENDING REQUEST FOR WRITE_ALL_FIELDS ROUTINE.
INST_EDIT_FLAG DS.B    1               ;INDICATES PENDING REQUEST FOR INSTALL_EDIT_FIELD ROUTINE.
;
PARAM_SIZE     DS.B    1               ;INDICATES SIZE OF PARAMETER BEING EDITED/DISPLAYED.
KEYPAD_ENABLE  DS.B    1               ;FLAG, INDICATES DECIMAL KEYPAD ENABLE/DISABLE STATUS.
SIGN_ENABLE    DS.B    1               ;FLAG FOR SIGNED PARAMETER - SIGN DISPLAY/ENTRY ENABLED.
ROUSING_GUIDO  DS.B    1               ;FLAG, INDICATES DECIMAL KEYPAD ENTRY BEING INITIATED.
GUIDO_IS_AWAKE DS.B    1               ;FLAG, INDICATES DECIMAL KEYPAD ENTRY IN PROGRESS.
GUIDO_FLD_STAT DS.B    1               ;FLAG TO INDICATE ON/OFF STATUS OF DISPLAY IN FIELD WHERE
                                       ;DECIMAL KEYPAD ENTRY IS IN PROGRESS.
PRE_GUIDO_LED  DS.B    1               ;"ENTER" LED STATUS WHEN GUIDO WOKE UP - HE RESTORES IT.
;
PAD_HIT_FLAG   DS.B    1               ;INDICATES A PAD HIT, FOR WHOM IT MAY CONCERN.
;
SHOWING_TEMPO  DS.B    1               ;FLAG - INDICATES LIVE TEMPO SCREEN IS BEING DISPLAYED.
SHOWING_FF_RW  DS.B    1               ;FLAG - INDICATES LIVE BAR NUMBER SCREEN INSTALLED BY FF/RW
;
BUILD_KIT_FLAG DS.B    1               ;IF NOT = 0 , WE'RE IN KIT-BUILD SCREEN/MODE.
KITS_EDITED    DS.B    1               ;BIT MAP OF KITS EDITED WHILE IN KIT-BUILD SCREEN/MODE.
;
VOLUME_CHANGE  DS.B    1               ;INDICATES LOCAL MASTER VOLUME CHANGE (FOR MIDI TRANSMIT).
LEVEL_CHANGE   DS.B    1               ;INDICATES PENDING SOUND LEVEL CHANGE AWAITING PAD HIT.
PITCH_CHANGE   DS.B    1               ;INDICATES PENDING SOUND PITCH CHANGE AWAITING PAD HIT.
PAN_CHANGE     DS.B    1               ;INDICATES PENDING SOUND PAN CHANGE AWAITING PAD HIT.
               .ALIGN 2
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; ASSORTED ACTIVITY AND STATUS FLAGS:
;
PAD_CTRL_STAT  DS.W    1               ;MOST RECENT OUTPUT TO PAD_CONTROL REGISTER.
;
DEFAULT_VEL    DS.W    1               ;DEFAULT VELOCITY TO USE, IF DISABLED
;
;920813-05:53pmCM_FLAGS_1     DS.W    1               ;SOME OF CHRIS'S GARBAGE FLAGS
;
CLICKS_PENDING DS.W    1               ;FLAG TO BACKGROUND OF HOW MANY 24 PPQN CLICKS IT HAS
                                       ;TO SERIVCE (UNPARSE SEQUENCER, ETC.).
;
SPINE_COUNT    DS.W    1               ;ROTATING INDEX OF BKGND MAINTENANCE ROUTINE TO PERFORM.
;
ROTATING_VOICE DS.W    1               ;ROTATING POINTER TO VOICE BLOCK CURRENTLY BEING UPDATED
                                       ;BY REALTIME NON-PRIORITY VECTOR PROCEDURES.
;
POT_CHK_INDEX  DS.W    1               ;ROTATING INDEX OF POT BACKGROUND IS TO LOOK FOR CHANGES ON.
;
PRIO_INDEX     DS.W    1               ;INDEX OF VOICE BLOCK CURRENTLY UNDERGOING PRIORITY
                                       ;REALTIME INITIALIZATION - LEST WE FORGET.
PRIO_POINTER   DS.W    1               ;POINTER TO VOICE BLOCK CURRENTLY UNDERGOING PRIORITY
                                       ;REALTIME INITIALIZATION - LEST WE FORGET.
WHICH_B_VOICE  DS.W    1               ;INDEX OF VOICE BLOCK CURRENTLY UNDERGOING BACKGROUND INIT -
                                       ;LEST WE FORGET.
;
FREE_SAM_RAM   DS.W    1               ;CURRENT AMOUNT OF FREE SAMPLE RAM IN 1K BLOCKS.
CR_SAM_SIZE    DS.W    1               ;CURRENT SIZE SETTING FOR SAMPLE-CREATE FUNCTION.
CR_SAM_RATE    DS.W    1               ;CURRENT RATE SETTING FOR SAMPLE-CREATE FUNCTION.
SAMPLE_RAM_END DS.W    1               ;CURRENT END OF SAMPLE RAM + 1 IN 1K BLOCKS -
                                       ;RELEVANT TO POSSIBLE RAM EXPANSION OPTIONS.
SAMPLED_SOUNDS DS.L    1               ;EACH OF THE 32 SOUNDS IS MAPPED TO ITS CORRESPONDING BIT -
                                       ;0 = SOUND IS NOT SAMPLED (DELETED?), 1 = SOUND IS PLAYABLE.
;
MASTER_TUNE    DS.W    1               ;UNIT TUNE TABLE OFFSET FOR MASTER TUNE FUNCTION.
;
FOOTSW_SELECT  DS.W    1               ;INDICATES WHICH FOOTSWITCH SETUP IS BEING EDITED/DISPLAYED.
;
FTSW1_OFF_ACT  DS.W    1               ;SWITCH-OFF ACTION FOR FOOTSWITCH 1.
;
FTSW1_SCROLL   DS.W    1               ;INDICATES AUTOSCROLL TARGET SWITCH FOR FOOTSWITCH 1.
;
FTSW1_OLD_ALT  DS.W    1               ;ORIGINAL ALT-PARAMS VALUE IF SUPPLANTED BY FTSW1_ALT_PRM -
                                       ;RESTORED WHEN FOOTSWITCH 1 IS RELEASED.
;
FTSW1_INDEX    DS.W    1               ;LOCATION OF FTSW1_ALT_PRM REPLACEMENT IN PAD/KIT ARRAYS.
;
FTSW1_OLD_PGM  DS.W    1               ;PREVIOUS PROGRAM REPLACED BY FTSW1_PGM AT FOOTSWITCH 1 ON -
                                       ;RESTORED WHEN FOOTSWITCH 1 RELEASED.
;
FTSW2_OFF_ACT  DS.W    1               ;SWITCH-OFF ACTION FOR FOOTSWITCH 2.
;
FTSW2_SCROLL   DS.W    1               ;INDICATES AUTOSCROLL TARGET SWITCH FOR FOOTSWITCH 2.
;
FTSW2_OLD_ALT  DS.W    1               ;ORIGINAL ALT-PARAMS VALUE IF SUPPLANTED BY FTSW2_ALT_PRM -
                                       ;RESTORED WHEN FOOTSWITCH 2 IS RELEASED.
;
FTSW2_INDEX    DS.W    1               ;LOCATION OF FTSW2_ALT_PRM REPLACEMENT IN PAD/KIT ARRAYS.
;
FTSW2_OLD_PGM  DS.W    1               ;PREVIOUS PROGRAM REPLACED BY FTSW2_PGM AT FOOTSWITCH 2 ON -
                                       ;RESTORED WHEN FOOTSWITCH 2 RELEASED.
;
FTPAD_XMT_BUF  DS.W    8               ;MIDI/MTC EVENT BUFFER FOR (2) FOOTSWITCH PAD EVENTS.
;
FTPAD_SEQ_BUF  DS.W    8               ;SEQUENCE EVENT BUFFER FOR (2) FOOTSWITCH PAD EVENTS.
;
FTPAD_ERAS_BUF DS.B    2               ;SEQUENCE ERASE BUFFER FOR (2) FOOTSWITCH PAD EVENTS.
;
;
FOOTSW_OFF     DS.B    1               ;BIT-MAP OF NEW RELEASES ON PROGRAMMABLE FOOTSWITCHES.
CURRENT_FOOTSW DS.B    1               ;TELLS PGM-ABLE FOOTSWITCH HANDLER WHICH ONE IT'S HANDLING.
NEW_FTPADS_ON  DS.B    1               ;BIT-MAP OF NEW CLOSURES OF FOOTSWITCHES ROUTED TO PADS.
CUR_FTPADS_ON  DS.B    1               ;BIT-MAP OF CURRENTLY-ON FOOTSWITCHES ROUTED TO PADS.
NEW_FTPADS_OFF DS.B    1               ;BIT-MAP OF NEW RELEASES OF FOOTSWITCHES ROUTED TO PADS.
AUTO_FTPADS_ON DS.B    1               ;BIT-MAP OF FOOTSWITCHES FOR WHICH AN AUTOREPEAT NOTE-ON
;                                      ;EVENT HAS BEEN PLAYED.
               .ALIGN 2
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; PAD/POT/TRIGGER-IN STATUS AND ARBITRATION FLAGS AND VARIABLES:
;
;
;
; POTENTIOMETER ARRAYS:
;
POT_VALUE      DS.W    5               ;RAW POT CONVERSION RESULT IS STORED IN L.S.BYTE,
                                       ;M.S.BYTE IS ALWAYS = 0.
POT_THRESH     DS.W    5               ;TRACKING HYSTERESIS THRESHOLD FOR EACH POT.
;
;
; MORE POT STUF - DATA POT ONLY:
;
POT_DIVISIONS  DS.W    1               ;INDICATES CURRENT NUMBER OF DIVISIONS ON DATA SLIDER.
DIVIDED_POT    DS.W    1               ;DATA SLIDER VALUE AFTER DIVISION PROCESSING -
                                       ;POT EDIT VECTOR IS CALLED ONLY WHEN THIS VALUE CHANGES.
POT_MULTIPLIER DS.L    1               ;INTEGER/FRACTION VALUE USED TO SCALE DIVIDED_POT VALUE.
;
                                       ;THE FOLLOWING REFLECT BOTH POT AND RECEIVED MIDI CHANGES:
CURRENT_VOLUME DS.W    1               ;CURRENT SCALED SETTING OF MASTER VOLUME.
VOLUME_OUT_VAL DS.W    1               ;CURRENT_VOLUME TRANSFORMED FOR DIRECT OUTPUT TO VOLUME S/H.
CURRENT_LEVEL  DS.W    1               ;CURRENT SCALED SETTING OF SOUND LEVEL.
CURRENT_PITCH  DS.W    1               ;CURRENT SCALED SETTING OF SOUND PITCH.
CURRENT_PAN    DS.W    1               ;CURRENT SCALED SETTING OF SOUND PAN.
;
;
;
; PRESSURE-PAD ARRAYS:
;
PAD_STATUS     DS.W    8               ;L.S.BYTE IS READ-INHIBIT TIMER, INDEPENDENTLY
PAD_TIMER      EQU     PAD_STATUS+1    ;ADDRESSABLE (.B) AS PAD_TIMER -
                                       ;M.S.BYTE INDICATES TYPE OF TIMEOUT IF PAD_TIMER > 0:
                                       ;    00 = THRESHOLD-CHECK INHIBIT (WATCHING FOR GATE-OFF).
                                       ;    FF = VELOCITY-READ INHIBIT (NEW GATE-ON).
PAD_VALUE      DS.W    8               ;RAW PAD CONVERSION RESULT IS STORED IN L.S.BYTE,
                                       ;M.S.BYTE IS ALWAYS = 0.
;
PAD_XMIT_BUF   DS.L    16              ;PAD EVENTS IN XMIT_LIVE FORMAT - STORED BY PRO_PADS_ON,
                                       ;READY TO USE BY PAD_ON_TRANSMIT FOR MIDI/MTC NOTE-ON XMIT,
                                       ;AND BY PRO_PADS_OFF FOR MIDI/MTC NOTE-OFF XMIT.
;
PAD_SEQ_BUF    DS.L    16              ;PAD EVENTS IN SEQUENCER FORMAT - STORED BY PRO_PADS_ON,
                                       ;READY TO USE BY PAD_ON_TRANSMIT FOR SEQUENCE NOTE-ON INPUT,
                                       ;AND BY PRO_PADS_OFF FOR SEQUENCER NOTE-OFF INPUT.
;
PAD_ERASE_BUF  DS.B    8               ;SOUND NUMBER / ALT-PARAMS BIT FOR "ON PADS" DURING ERASE -
                                       ;USED BY PRO_PADS_OFF TO REMOVE SOUNDS FROM THE ERASE LIST.
;
;
;
; GLOBAL ARBITRATION:
;
PAD_ARB_INDEX  DS.W    1               ;INDICATES PAD LAST READ.
;
POT_ARB_INDEX  DS.W    1               ;INDICATES POT LAST READ.
;
CONVERT_DEST   DS.W    1               ;ABS_SHORT POINTER TO DESTINATION OF ADC CONVERSION RESULT.
;
TRIGGER_MODE   DS.B    1               ;FLAG, INDICATES AUDIO TRIGGER SCAN IS ENABLED.
;
AUTORPT_FLAG   DS.B    1               ;IF NOT = 0, WE'RE IN AUTOREPEAT MODE.
;
READING_PAD    DS.B    1               ;INICATES PAD (NOT POT) CONVERSION BY ADC.
;
;
; GLOBAL PAD STATUS FLAGS (BIT-MAPPED):
;
AUTO_PADS_ON   DS.B    1               ;INDICATES ACKNOWLEDGED PADS-ON IN AUTOREPEAT MODE -
                                       ;I.E., PADS WHICH HAVE WERE PROCESSED THROUGH PRO_PADS_ON AT
                                       ;LAST AUTOREPEAT GATE-ON TIME, AND WHICH MUST HAVE MATCHING
                                       ;NOTE-OFF PROCESSING BY PRO_PADS_OFF WHEN AUTOREPEAT
                                       ;GATE-OFF OCCURS.
;
CUR_PADS_ON    DS.B    1               ;INDICATES WHICH OF PADS 0-7 ARE CURRENTLY ON.
;
                                       ;FOLLOWING FLAGS APPLY TO NON-AUTOREPEAT MODE ONLY:
;
NEW_PADS_ON    DS.B    1               ;INDICATES WHICH PADS HAVE JUST COME ON -
                                       ;FLAGS BACKGROUND TO RESPOND.
;
NEW_PADS_OFF   DS.B    1               ;INDICATES WHICH PADS HAVE JUST GONE OFF -
                                       ;FLAGS BACKGROUND TO RESPOND.
;
READ_PADS_ASAP DS.B    1               ;INDICATES WHICH PADS ARE READY FOR IMMEDIATE CONVERSION.
;
PAD_VEL_AVAIL  DS.B    1               ;INDICATES WHICH PAD_VALUE CELLS HOLD CURRENT VEL VALUE.
;
PAD_XMIT_PEND  DS.B    1               ;INDICATES PADS FOR WHICH A MIDI/MTC NOTE-ON TRANSMISSION
                                       ;IS AWAITING PAD VELOCITY VALUE.
;
               .ALIGN 2
;
;
; AUDIO TRIGGER-IN ONLY:
;
TRIGGER_TIMER  DS.W    1               ;COUNTS DOWN TO 0 PER REALTIME -
                                       ;INHIBITS TRIGGER-IN READ WHILE > 0.
;
TRIGGER_VALUE  DS.W    1               ;MOST RECENT VALUE READ FROM TRIGGER-IN.
                                       ;NOTE:  ACTUAL VALUE IS IN L.S.BYTE, M.S.BYTE ALWAYS = 0.
;
TRIG_XMT_BUF   DS.L    2               ;BUFFER FOR TRIGGER-GENERATED MIDI/MTC EVENT.
;
TRIG_SEQ_BUF   DS.W    3               ;BUFFER FOR TRIGGER-GENERATED SEQUENCER EVENT.
;
TRIGGER_READ   DS.B    1               ;IF NOT = 0, ADC IS CURRENTLY CONVERTING TRIGGER-IN LEVEL.
;
TRIGGER_ON     DS.B    1               ;INDICATES TRIGGER GATE STATUS: 0 = OFF, FF = ON.
;
NEW_TRIG_ON    DS.B    1               ;IF NOT = 0, TRIGGER-ON HAS JUST OCCURRED -
                                       ;FLAGS BACKGROUND TO RESPOND.
;
SENSING_TRIG   DS.B    1               ;IF NOT = 0, INDICATES TRIGGER-IN VEL-SENSING IN PROGRESS.
;
TRIG_XMT_PEND  DS.B    1               ;INICATES MIDI/MTC/SEQ EVENTS AWAITNG SENSED TRIG VELOCITY.
               .ALIGN 2
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; MISCELLANEOUS BYTE VARIABLES AND FLAGS:
;
               .ALIGN 2     ;THIS IS FOR BG(ETC.)_TEMPS, DON'T REMOVE IT!
;
BG_TEMP_1_B    DS.B    1               ;A ROW OF CONTIGGULOUS VARIABLES
BG_TEMP_2_B    DS.B    1               ;(NOTE THAT MUST BE ON AN EVEN BOUNDRY - USED AS WORDS, TOO)
BG_TEMP_3_B    DS.B    1               ; FOR USE IN BACKGROUND ROUTINES
BG_TEMP_4_B    DS.B    1
BG_TEMP_5_B    DS.B    1
BG_TEMP_6_B    DS.B    1
BG_TEMP_7_B    DS.B    1
BG_TEMP_8_B    DS.B    1
BG_TEMP_9_B    DS.B    1
BG_TEMP_10_B   DS.B    1
;
DI_TEMP_1_B    DS.B    1               ;A ROW OF CONTIGGULOUS VARIABLES
DI_TEMP_2_B    DS.B    1               ;(NOTE THAT MUST BE ON AN EVEN BOUNDRY - USED AS WORDS, TOO)
DI_TEMP_3_B    DS.B    1               ; FOR DISPLAY FIELD EDIT FUNCTIONS
DI_TEMP_4_B    DS.B    1
DI_TEMP_5_B    DS.B    1
DI_TEMP_6_B    DS.B    1
DI_TEMP_7_B    DS.B    1
DI_TEMP_8_B    DS.B    1
DI_TEMP_9_B    DS.B    1
DI_TEMP_10_B   DS.B    1
;
;
L4_TEMP_1_B    DS.B    1               ;A ROW OF CONTIGGULOUS VARIABLES
               DS.B    1                 ;FOR LEVEL 4 INT
               DS.B    1
               DS.B    1
               DS.B    1
               DS.B    1
               DS.B    1
               DS.B    1
;
L5_TEMP_1_B    DS.B    1               ;A ROW OF CONTIGGULOUS VARIABLES
               DS.B    1                 ;FOR LEVEL 5 INT
               DS.B    1
               DS.B    1
               DS.B    1
               DS.B    1
               DS.B    1
               DS.B    1
;
L6_TEMP_1_B    DS.B    1               ;A ROW OF CONTIGGULOUS VARIABLES
               DS.B    1                 ;FOR LEVEL 6 INT
               DS.B    1
               DS.B    1
               DS.B    1
               DS.B    1
               DS.B    1
               DS.B    1
;
MISC_OUT_STAT  DS.B    1               ;MOST RECENT OUTPUT TO MISC_OUT REGISTER.
;
MA_RUN_STATUS  DS.B    1               ;UART A TRANSMIT DRIVER RUNNING STATUS.
MB_RUN_STATUS  DS.B    1               ;UART B TRANSMIT DRIVER RUNNING STATUS.
;
               .ALIGN 2
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; VOICE ASSIGNMENT/INITIALIZATION VARIABLES, STATUS MAPS AND FLAGS:
;
               .ALIGN 2
;
;
ASSIGN_BLOCK   DS.W    9               ;EVENT INFO IS PASSED TO VOICE_ASSIGN IN THIS BLOCK
                                       ;IN ORDER FOR A VOICE TO BE ASSIGNED, SET UP AND STARTED -
                                       ;FOR DETAILS, REFER TO MODULE ASSIGN.
;
LAST_DYN_VOICE DS.W    1               ;INDEX OF LAST-ASSIGNED DYNAMIC VOICE - NEXT DYNAMIC-ASSIGN
                                       ;VOICE SEARCH STARTS WITH NEXT VOICE DOWN FROM THIS ONE.
NUM_DYN_VOICES DS.W    1               ;CURRENT TOTAL NUMBER OF VOICES IN DYNAMIC-ASSIGN POOL.
;
IDLE_DYNAMIC   DS.B    1               ;BIT MAP OF DYNAMIC-ASSIGN VOICES CURRENTLY SITTING IDLE.
ACTIVE_DYNAMIC DS.B    1               ;BIT MAP OF DYNAMIC-ASSIGN VOICES CURRENTLY IN USE.
PRIO_DYNAMIC   DS.B    1               ;BIT MAP OF DYNAMIC-ASSIGN VOICES CURRENTLY IN PRIORITY SEQ.
FIXED_VOICES   DS.B    1               ;BIT MAP OF FIXED-ASSIGN VOICES, BOTH ACTIVE AND IDLE.
;
               .ALIGN 2
;
CUR_SQ_DYN_ON  DS.B    1               ;BIT MAP OF GATED-ON DYNAMIC-ASSIGN SEQUENCER VOICES.
CUR_SQ_FIX_ON  DS.B    1               ;BIT MAP OF GATED-ON FIXED-ASSIGN SEQUENCER VOICES.
AVAIL_DYNAMIC  DS.W    1               ;NUMBER OF DYNAMIC-ASSIGN VOICES STILL AVAILABLE FOR EVENT
                                       ;ASSIGN AT CURRENT POINT IN CLICK SERVICE.
AVAIL_FIXED    DS.B    1               ;BIT MAP OF FIXED-ASSIGN VOICES NOT YET ASSIGNED TO NEW
                                       ;SEQUENCER EVENTS AT CURRENT POINT IN CLICK SERVICE.
               .ALIGN 2
;
ASS_HOLE       DS.W    12              ;THREE 8-BYTE SCRATCH ARRAYS USED BY VOICE-STEAL PROCEDURE.
;
;
;09DECNU_SQ_FIX_ONS  DS.B    1               ;BIT MAP OF FIXED-ASSIGN VOICES WHICH WILL BE ASSIGNED TO
;09DEC                                       ;SEQ EVENTS AT THE END OF CURRENT CLICK SERVICE.
;09DECUM_NU_FIX_ONS  DS.B    1               ;SUBSET OF NU_SQ_FIX_ONS - VOICES FOR WHICH A MATCHING NOTE-
;09DEC                                       ;OFF HAS NOT YET BEEN PARSED DURING CURRENT CLICK SERVICE.
;09DECNU_SQ_DYN_ONS  DS.W    1               ;NUMBER OF NOTE-ONS PARSED DURING CURRENT CLICK SERVICE FOR
;09DEC                                       ;WHICH DYNAMIC-ASSIGN WILL BE DONE AT END OF CLICK SERVICE.
;09DECUM_NU_DYN_ONS  DS.W    1               ;NUMBER OF NOTE-ONS PENDING DYNAMIC-ASSIGN WHICH HAVE NOT
;09DEC                                       ;BEEN MATCHED BY A NOTE-OFF READ DURING SAME CLICK SERVICE.
;10DEC;
;10DECSEQ_DYN_ON_BUF DS.L    16              ;GOT WIPED WHILE BEING KO'D - OH WELL.
;09DEC;
;10DECSQ_DYN_BUF_PTR DS.W    1               ;POINTS TO NEXT EMPTY LOCATION IN SQ_DYN_ON_BUF.
;10DEC;
;10DECSQ_FIX_ON_BUF  DS.L    16              ;SEQ NOTE-ONS PENDING FIXED ASSIGN ARE BUFFERED HERE.
;10DEC;
;10DECSQ_INT_ON_VEC  DS.W    1               ;CLICK-SERVICE SEQUENCE INTERNAL NOTE-ON HANDLER VECTOR.
;10DEC;
;10DECSQ_INT_OFF_VEC DS.W    1               ;CLICK-SERVICE SEQUENCE INTERNAL NOTE-OFF HANDLER VECTOR.
;10DEC;
;10DEC         THE ABOVE WERE FOR "WHITER-BRITER", WHO ALAS COULD NOT BE WITH US ....
;10DEC         IN HIS PLACE WE BRING YOU ....
;
;15MAYCLICK_ASSIGN   DS.B    1               ;BIT MAP OF VOICES ASSIGNED TO SEQUENCER EVENTS DURING THE
;15MAY                                       ;CURRENT CLICK.
;15MAY            MAY PUT THIS BACK IN IF SEQUENCER PHASES ARE REARRANGED
;15MAY            TO PUT OLD EVENTS BEHIND NEW ONES ON THE AUTOCORRECT CLICK.
;
;
;
;
NON_VEL_INIT   DS.B    1               ;BIT MAP OF VOICES NEEDING INITIALIZATION - THIS PROCESS
                                       ;ALWAYS BEGINS WITH NON-VELOCITY-DEPENDENT PARAMETERS.
VOICES_TO_OFF  DS.B    1               ;BIT MAP OF VOICES TO BE GATED OFF - USED WITH SEQ NOTE-OFF
                                       ;DELAY SYSTEM (SINCE SEQ EVENTS ARE PRE-FETCHED), AND BY
                                       ;OTHER FUNCTIONS WHICH DO A VOICE-SPECIFIC, RATHER THAN
                                       ;EVENT-SPECIFIC, VOICE GATE-OFF.
VOICES_TO_REL  DS.B    1               ;BIT MAP OF VOICES FOR WHICH GATE-OFF HAS BEEN ACKNOWLEDGED
                                       ;AT THE V_IDENTITY/ASSIGN-MAP LEVEL - THESE BITS INVOKE THE
                                       ;ACTUAL VOICE VECTOR/LOOP STATUS TRANSITIONS.
CHIPS_TO_ZERO  DS.B    1               ;BIT MAP OF VOICES WHICH HAVE GONE IDLE VIA TERMINATION OF
                                       ;VCA RELEASE - BITS INVOKE BACKGROUND ROUTINE TO FORCE THE
                                       ;SOUND CHIP FOR A GIVEN VOICE TO ZERO-LEVEL PLAYBACK LOC.
               .ALIGN 2
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; DISK-SYSTEM VARIABLES:
;
; PARAMETERS PASSED TO DISK SYSTEM:
; (AHH - THIS NOT INCLUDE OTHER CONTROL APEAR SEVAL HUNDRED LINE UP).
;
DISK_OP_CODE   DS.W   1            ;PASSED BY SYSTEM - CODE FOR OPERATION REQUESTED OR IN PROGRESS.
;
;
;
; THE REMAINDER OF DISK-SYSTEM VARIABLES
; ARE USED INTERNALLY BY DISK SYSTEM ONLY:
;
CUR_XFR_ADDR   DS.L   1            ;FOR SAMPLE DATA MOVES, INDICATES BEGINNING SAMPLE RAM ADDRESS
                                   ;FOR RECORD CURRENTLY BEING MOVED.
                                   ;UPDATED FOR EACH RECORD, FACILITATES RETRY UPON ERROR.
                                   ;SET_RAM_INTFC PLACES THIS VALUE IN CHIP LEFT ADDRESS LATCH.
                                   ;BYTES 0-1 HOLD CPU RAM TRANSFER ADDRESS DURING PARMS_MOVE.
                                   ;FOR SYSTEM CODE MOVES, INDICATES CPU RAM TRANSFER ADDRESS FOR
                                   ;RECORD CURRENTLY BEING MOVED (BYTES 0-1 ONLY).
;
DSK_FIL_ADDR   DS.L   1            ;FOR 1-SAMPLE LOAD, USED AS FILE/SUB-FILE POINTER TO COMPUTE
                                   ;BEGINNING/FINAL RECORD NUMBERS, BYTE/WORD TRANSFER COUNTS FOR
                                   ;BEGINNING/FINAL RECORDS, AND BYTE-SKIP COUNT, TRACK NUMBER,
                                   ;SECTOR NUMBER, SECTOR OFFSET FOR BEGINNING RECORD.
;
DSK_FIL_LENGTH DS.L   1            ;FOR 1-SAMPLE LOAD - USED IN CONJ WITH DSK_FIL_ADDR (ABOVE).
;
BEG_REC_BYTES  DS.W   1            ;INDICATES THE DATA TRANSFER LENGTH (BYTES) AFTER
                                   ;BEGINNING-TRUNCATION FOR FIRST RECORD OF A 1-SAMPLE LOAD.
;
BEG_REC_WORDS  DS.L   1            ;INDICATES THE DATA TRANSFER LENGTH (WORDS) AFTER
                                   ;BEGINNING-TRUNCATION FOR FIRST RECORD OF A 1-SAMPLE LOAD.
;
CURRENT_TRACK  DS.W   1            ;CURRENT OR DESTINATION TRACK POSITION OF READ/WRITE HEAD.
;
CURRENT_SIDE   DS.W   1            ;INDICATES WHICH SIDE OF DISK IS CURRENTLY BEING ACCESSED.
;
CURRENT_SEC    DS.W   1            ;SECTOR NUMBER IN USE BY READ, WRITE OR FORMAT ROUTINE.
;
SECTOR_OFFSET  DS.W   1            ;FOR SAMPLE-DATA TRANSFERS, SETS FIRST SECTOR TO BE ACCESSED ON
                                   ;EACH TRACK - OFFSET OF 1 SECTOR/TRACK MINIMIZES TRANSFER TIME.
;
CURRENT_REC    DS.W   1            ;SAMPLE DATA OR SYSTEM CODE LOGICAL RECORD
                                   ;CURRENTLY BEING ACCESSED.
;
FINAL_REC      DS.W   1            ;FINAL LOGICAL RECORD OF CURRENT TRANSFER.
;
FIN_REC_BYTES  DS.W   1            ;TRANSFER LENGTH (BYTES) FOR FINAL_REC.
;
FIN_REC_WORDS  DS.L   1            ;TRANSFER LENGTH (WORDS) FOR FINAL_REC.
;
BEGIN_TRUNC    DS.W   1            ;IF NOT = 0, SECTOR_READ OR READ_12_BIT PAGES FIRST (IX)
                                   ;BYTES IN SECTOR, THEN READS (BYTE_LENGTH) BYTES INTO
                                   ;CPU OR SAMPLE RAM.
;
BYTE_LENGTH    DS.W   1            ;INDICATES DATA TRANSFER LENGTH (BYTES) FOR SECTOR_READ OR
                                   ;READ_12_BIT IF READ OF CURRENT SECTOR TRUNCATED AT BEGINNING.
;
TRUNC_BYTES    DS.W   1            ;FOR 1-SAMPLE LOAD - VALID ONLY IF BEGIN_TRUNC > 0.
                                   ;BEGINNING-TRUNCATION BYTE COUNT (FOR FIRST RECORD ONLY).
                                   ;PASSED TO SAMPLE_MOVE SO IT CAN SET UP FIRST READ_12_BIT CALL.
;
WORD_LENGTH    DS.L   1            ;# OF WORDS TO BE TRANSFERRED TO/FROM CURRENT SAMPLE RECORD -
                                   ;GETS BEG_REC_WORDS, FIN_REC_WORDS OR CONSTANT SAM_REC_WORDS AS
                                   ;APPROPRIATE.  USED IN ADDR ACCOUNTING ONLY (WITH CUR_XFR_ADDR).
;
DISKTEMP1      DS.W   1            ;LOCAL SCRATCH STORAGE (DON'T SAVE ANYTHING HERE!).
;
RETRIES        DS.W   1            ;USED TO COUNT THE NUMBER OF RETRIES ATTEMPTED (IN RESPONSE TO
                                   ;THE OCCURRENCE OF AN ERROR) ON THE CURRENT LOW-LEVEL OPERATION.
;
INDEX_COUNT    DS.W   1            ;USED TO COUNT INDEX PULSES WHILE AWAITING SPINDLE-MOTOR SPIN-UP
                                   ;AND WHILE CHECKING SPINDLE-MOTOR SPEED.
;
ADDR_BUF       DS.W   1            ;USED BY LOOK_FOR_ADDR / ADDR_READ TO HOLD SECTOR ID INFO
                                   ;READ FROM DISK DURING FORMAT/SIDE-SELECT TESTS.
;
DISK_MSG_PTR   DS.L   1            ;POINTER TO MESSAGE SCREEN DURING USER QUERY.
;
FLASH_TIME     DS.W   1            ;COUNTER FOR LED FLASH AND DRIVE STATUS CHECK DURING USER QUERY.
;
DISK_MSG_STAT  DS.B   1            ;CONTROLS ALTERNATING MESSAGES DURING USER QUERY.
;
ABORT_FLAG     DS.B   1            ;CONTROLS KEEPING DRIVE READY DURING GET_RESPONSE (1 = NO).
;
SWITCH_BLOCK   DS.B   1            ;IF NONZERO, INDICATES SWITCH RELEASE IS BEING AWAITED.
;
               .ALIGN 2
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; FLOPPY DISK DESCRIPTOR BUFFER DEFINITIONS -
; THIS INFO WRITTEN ON SIDE 0, TRACK 0, SECTOR 5 OF ALL MODEL 440 DISKS,
; AND IS ALWAYS READ INTO THIS BUFFER AT THE START OF A DISK OPERATION.
; (NOTE: PRESENT ON MODEL 2000 DISKS ALSO, WITH MINOR DETAIL CHANGES.)
; (ALSO NOTE: SEPARATE DEFS AND BUFFERS FOR SCSI HARD DISK.)
;
               .ALIGN 2
;
FD_DESCR_BUF   DS.B    18              ;SPACE FOR '(C)SEQUENTIAL-1986'
;
FD_MODEL_ID    DS.B    4               ;SPACE FOR '0440'.
;
FD_FIRMWR_REV  DS.W    1               ;INDICATES REV-LEVEL OF CODE WHICH FORMATTED THE DISK,
                                       ;INSOFAR AS IT AFFECTS INTERPRETATION OF DATA ON DISK -
                                       ;I.E., NOT RELATED TO MAIN 440 FIRMWARE REVISION NUMBER.
;
; DISK TYPE AND FILE STATUS FLAGS -
; (THIS IS STILL PART OF FLOPPY DISK DESCRIPTOR RECORD BUFFER).
; IF NOT COMMITTED TO A GIVEN TYPE, DISK IS CONSIDERED BLANK.
; IF COMMITTED TO A GIVEN TYPE, ALL ANCILLARY FILES ASSOCIATED WITH THAT
; TYPE ARE ASSUMED TO EXIST - THUS, DISK_TYPE IS ALSO A FILE STATUS FLAG
; FOR FILES WHICH ARE SAVED DURING ALL-SOUNDS SAVE (SOUND CONTROLS,
; SAMPLE DATA, PAD KITS/BANKS, SYSTEM CONFIGURATION BLOCKS) AND
; ALL-SEQUENCES SAVE (SEQUENCE DATA, DIRECTORY, MEMORY BLOCK LIST, SONG
; LIST, SYSTEM CONFIGURATION BLOCKS).
;
; ANCILLARY FILE SAVES (E.G. KITS/BANKS, SONG LIST) TO TYPE-UNCOMMITTED
; DISKS ARE NOT ALLOWED, IN ORDER TO KEEP RULES SIMPLE AND MINIMIZE THE
; NUMBER OF FILE STATUS FLAGS WHICH NEED TO BE MAINTAINED AND TESTED.
; THE CUE LIST FILE HAS ITS OWN FILE STATUS FLAG, SINCE IT IS NOT SAVED
; OR LOADED AS PART OF EITHER AN ALL-SOUNDS OR ALL-SEQUENCES TRANSFER.
;
; FILE STATUS VARIABLES = #DELETED IF ASSOCIATED FILE HAS NOT
; BEEN SAVED TO SINCE DISK FORMATTED - ELSE = #NON_DELETED.
; ALL DISK TYPES HAVE SAME FILE STATUS VARIABLE MAP, ALTHOUGH
; NOT ALL FILE TYPES CAN APPEAR ON ALL TYPES OF DISK.
;
; NOTE:  KEEP DISK_TYPE, CUEFILE STATUS FLAG AND OTHER STATUS FLAGS IN
; EXISTING ORDER AND CONTIGUOUS - ADD NEW THINGS ON AT THE END ....
;
FD_DISK_TYPE   DS.W    1               ;CURRENTLY DEFINED TYPE CODES:
                                       ;0FFFFH = UNCOMMITTED (WRITTEN BY FORMAT PROCEDURE).
                                       ;0000H  = SOUNDS DISK.
                                       ;0001H  = SEQUENCES DISK.
                                       ;0002H  = PROGRAMS DISK.
;
FD_QFILE_STAT  DS.W    1               ;CUE LIST FILE (SOUND OR SEQUENCE DISKS).
;
FD_UNDEF_STAT  DS.W    15              ;AS THE LABEL SAYS .... FOR POSSIBLE EXTENSIONS.
;
FD_DISK_NAME   DS.B    8               ;SPACE FOR EIGHT-CHARACTER DISK NAME.
;
FD_DESCR_LEN   EQU     *-FD_DESCR_BUF  ;WORKING SIZE OF FLOPPY DISK DESCRIPTOR BUFFER FOR
;                                      ;FORMAT-CHECKING OPERATIONS.
;
;
; SOME MODEL 2000 LEFTOVERS -
; BUT HEAT 'EM, WE'LL EAT 'EM (SINCE WE READ 2000 DISKS):
;
FMT_CODE       EQU     FD_DESCR_BUF+21 ;CODE FOR DISK FORMAT ( = 0 FOR 1-SIDED, = 1 FOR 2-SIDED).
;
FW_REV         EQU     FMT_CODE+1      ;INDICATES REV-LEVEL OF CODE WHICH FORMATTED THE DISK -
                                       ;FOR REV 2.1 = 16 (DECIMAL), FOR REV 3.0 = 30H.
                                       ;SEE DISKDEFS:EXDISK SOURCE FOR A MORE DETAILED HISTORY.
;
LFT_HLF_STAT   EQU     FW_REV+5        ; = #DELETED (IF LEFT DISK HALF UNUSED) OR = #NON_DELETED.
;
RGT_HLF_STAT   EQU     LFT_HLF_STAT+1  ; = #DELETED (IF RIGHT DISK HALF UNUSED) OR = #NON_DELETED.
;
               .ALIGN 2
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; SCSI HARD DISK DESCRIPTOR BUFFER -
; THIS INFO WRITTEN INTO LOGICAL BLOCK 0 WHEN DISK IS FORMATTED BY 440,
; AND IS ALWAYS READ INTO THIS BUFFER AT THE START OF A DISK OPERATION.
; CONTAINS INFORMATION ON THE DRIVE PHYSICAL CHARACTERISTICS AND THE
; REV LEVEL OF THE 440 WHICH FORMATTED IT - NO FILE INFO HERE.
;
               .ALIGN 2
;
HD_DESCR_BUF   DS.B    10              ;SPACE FOR 'SEQUENTIAL'
;
HD_MODEL_ID    DS.B    4               ;SPACE FOR '0440'.
;
HD_FIRMWR_REV  DS.W    1               ;INDICATES REV-LEVEL OF CODE WHICH FORMATTED THE DISK,
                                       ;INSOFAR AS IT AFFECTS INTERPRETATION OF DATA ON DISK.
                                       ;I.E., NOT RELATED TO MAIN 440 FIRMWARE REVISION NUMBER.
;
HD_DRIVE_TYPE  DS.W    1               ;CODE WHICH INDICATES TYPE OF DRIVE, CONTROLLER, FIRMWARE -
                                       ;TO INVOKE ANY REQUIRED SPECIAL HANDLING FOR A GIVEN DEVICE.
;
HD_CAPACITY    DS.W    1               ;INDICATES FORMATTED CAPACITY (BANKS).
;
HD_DESCR_LEN   EQU     *-HD_DESCR_BUF  ;LENGTH OF HARD DISK DESCRIPTOR.
HD_DESCR_XTRA  EQU     512-HD_DESCR_LEN     ;LEFTOVER WHEN DESCRIPTOR IS FIT INTO 512-BYTE RECORD.
;
;
;
; SCSI HARD DISK BANK DESCRIPTOR BUFFER -
; FIRST LOGICAL BLOCK OF EVERY HARD DISK BANK IS THE BANK DESCRIPTOR.
; CONTAINS BANK NAME AND INFO ON THE DATA STORED WITHIN THAT BANK.
; OVERALL, COMMENTS FOR FLOPPY DISK DESCRIPTOR APPLY HERE ALSO -
; A HARD DISK BANK IS MEANT TO RESEMBLE A SINGLE FLOPPY DISK.
;
; NOTE:  KEEP BANK_TYPE, CUEFILE STATUS FLAG AND OTHER STATUS FLAGS IN
; EXISTING ORDER AND CONTIGUOUS - ADD NEW THINGS ON AT THE END ....
;
               .ALIGN 2
;
BANK_DESCR_BUF DS.B    8               ;SPACE FOR EIGHT-CHARACTER BANK NAME.
;
BANK_WRT_PROT  DS.W    1               ;0FFFFH = BANK WRITE-PROTECTED, 0000H = NOT WRITE-PROTECTED.
;
BANK_TYPE      DS.W    1               ;CURRENTLY DEFINED TYPE CODES:
                                       ;0FFFFH = UNCOMMITTED (WRITTEN BY FORMAT PROCEDURE).
                                       ;0000H  = SOUNDS BANK.
                                       ;0001H  = SEQUENCES BANK.
                                       ;0002H  = PROGRAMS BANK.
;
BANK_QFIL_STAT DS.W    1               ;CUE LIST FILE (SOUND OR SEQUENCE BANKS).
;
BANK_UNDF_STAT DS.W    15              ;AS THE LABEL SAYS .... FOR POSSIBLE EXTENSIONS.
;
BANK_DESCR_LEN EQU     *-BANK_DESCR_BUF     ;LENGTH OF BANK DESCRIPTOR BUFFER.
BANK_DESCR_XTRA  EQU   512-BANK_DESCR_LEN   ;LEFTOVER WHEN DESCRIPTOR IS FIT INTO 512-BYTE RECORD.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; MASTER DESCRIPTOR BUFFER -
; INFO FROM FLOPPY DISK DESCRIPTOR OR SCSI HARD DISK BANK DESCRIPTOR IS
; PLUGGED IN HERE WHEN DESCRIPTOR IS READ -
; ALLOWS UNIFIED STATUS TESTING FOR FLOPPY AND SCSI DISK PROCEDURES.
; ALSO, BANK NAME EDITING OCCURS HERE.
;
               .ALIGN 2
;
CUR_MODEL_ID   DS.B    4               ;MODEL NUMBER STRING FOR MACHINE WHICH FORMATTED DISK.
;
CUR_FIRMWR_REV DS.W    1               ;INDICATES REV-LEVEL OF CODE WHICH FORMATTED THE DISK,
                                       ;INSOFAR AS IT AFFECTS INTERPRETATION OF DATA ON DISK.
                                       ;I.E., NOT CHANGED FOR EVERY 440 FIRMWARE REVISION.
;
CUR_BANK_NAME  DS.B    16              ;BUFFER FOR CURRENT DISK SOUND, SEQUENCE BANK NAMES.
;
CUR_FILE_TYPE  DS.W    1               ;CURRENTLY DEFINED TYPE CODES:
                                       ;0FFFFH = UNCOMMITTED (WRITTEN BY FORMAT PROCEDURE).
                                       ;0000H  = SOUNDS.
                                       ;0001H  = SEQUENCES.
                                       ;0002H  = PROGRAMS.
;
CUR_WRT_PROT   DS.W    1               ;BANK WRITE-PROTECT STATUS - PROTECTED IF NOT = 0.
                                       ;VALID FOR SCSI DISK ONLY, CLEARED (= OFF) FOR FLOPPY DISKS.
;
CUR_QFILE_STAT DS.W    1               ;CUE LIST FILE STATUS (SOUND OR SEQUENCE DISKS/BANKS).
;
                                       ;NOTE - OTHER FILE STATUS FLAGS ARE AS YET UNDEFINED,
                                       ;SO WE DON'T BOTHER PULLING THEM INTO MASTER DESCRIPTOR -
                                       ;IF WE DID, RIGHT HERE IS WHERE THEY'D BE.
;
CUR_OMTI_REV   DS.W    1               ;SORTA OFF ON ITS OWN - THIS IS SET BY THE READ_DATA_BUFFER
                                       ;COMMAND WHEN SUCCESSFULLY APPLIED TO DATAFRAME SCSI DRIVE.
                                       ;INDICATES REVISION LEVEL OF THE INTERNAL OMTI CONTROLLER,
                                       ;WHICH BEARS MAINLY UPON POWER-UP CONFIG AND SCSI ID CHANGE.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; SCSI SYSTEM VARIABLES:
;
SCSI_CMD_BUF   DS.W    5               ;BUFFER FOR SIX-BYTE/TEN-BYTE COMMAND DESCRIPTOR BLOCKS.
;
CUR_SCSI_PHS   DS.B    1               ;HOLDS PHASE CODE FOR CURRENT SCSI BUS PHASE.
;
LAST_SCSI_PHS  DS.B    1               ;HOLDS PHASE CODE FOR PREVIOUS SCSI BUS PHASE.
;
TARG_STATUS    DS.B    1               ;HOLDS STATUS BYTE MOST RECENTLY READ FROM TARGET.
;
TARG_MESSAGE   DS.B    1               ;HOLDS MESSAGE BYTE MOST RECENTLY READ FROM TARGET.
;
TARG_SENSE_KEY DS.B    1               ;HOLDS SENSE KEY BYTE MOST RECENTLY READ FROM TARGET.
;
SCSI_VER_FLAG  DS.B    1               ;COMPARE-ERROR FLAG FOR SCSI DATA-VERIFY OPERATIONS.
;
VALID_HD_DESCR DS.B    1               ;INDICATES OUTCOME OF MOST RECENT DISK DESCRIPTOR READ.
               .ALIGN 2
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


















;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; ROM "MONITOR" VARIABLES -
; FOR CRASH ANALYSIS:
;
EXCEPTION_MSG  DS.L    1               ;POINTER TO EXCEPTION MESSAGE SCREEN.
;
;
; THIS BE WHERE PROCESSOR REGISTERS ARE STASHED BY EXCEPTION HANDLER:
;
PROG_COUNTER   DS.L    1
PROC_STATUS    DS.L    1
PROC_REGISTERS DS.L    16
;
EXCEPTION_STAT DS.W    1               ;EXCEPTION STATUS WORD
ACCESS_ADDR_HI DS.W    1               ;ACCESS ADDRESS HIGH
ACCESS_ADDR_LO DS.W    1               ;ACCESS ADDRESS LOW
INSTRUCT_REG   DS.W    1               ;INSTRUCTION REGISTER
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
;
;
;
;VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
;
; VARIABLES ASSOCIATED WITH INTERNAL SOFTWARE DIAGNOSTICS:
; NOT RELATED TO HARDWARE DIAGNOSTICS IN DIAG440, ALLOW ACCESS TO 440
; INTERNALS DURING NORMAL OPERATION FOR DEBUGGING PURPOSES.
;
; NOTE THAT THESE WERE INTENTIONALLY PLACED AT THE VERY TOP OF DEFINED
; VARIABLE RAM IN ORDER NOT TO DISTURB ANY POSSIBLE POSITION-DEPENDENT
; PROBLEMS WE MAY BE TRYING TO CATCH ....
;
DIAGS_ENABLED  DS.B    1               ;INDICATES INTERNAL SOFTWARE DIAGNOSTICS ARE ENABLED.
;
SEQ_ERROR_FLAG DS.B    1               ;IF NOT = 0, CONTAINS SEQUENCER ERROR CODE TO BE DISPLAYED.
;
SEQ_PEEK_BAR   DS.W    1               ;TARGET BAR NUMBER FOR SEQ_PEEK_SUB.
;
SEQ_PEEK_CLOCK DS.W    1               ;TARGET CLOCK NUMBER FOR SEQ_PEEK_SUB.
;
SEQ_PEEK_COUNT DS.W    1               ;TARGET EVENT COUNT NUMBER FOR SEQ_PEEK_SUB.
;
SEQ_PEEK_SEARCH DS.B   1               ;SEARCH MODE FOR SEQ_PEEK_SUB.
;
;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

