; GBL.i -- global memory allocations
 
; Revision History:
;  18-Dec-2002 - SPG - ISUAL Flight Software rev 7.3
;    First Official Release
;  28-Dec-2002 
;    added GBL_720
;  11-Jan-2003
;    added GBL_XGS, GBL_XGS_SP
;  12-Jan-2003
;    added GBL_RO_IDLE
;    added GBL_SOH_WAIT
;  15-Jan-2003
;    added GBL_EEPROM
;    added GBL_WAIT_TIMEOUT
;  14-Feb-2003
;    added GBL_TRIGGER_DELAY
;    added GBL_DOING_TRIG_DELAY
;    removed GBL_ARMSW
;  19-May-2003 ;    added GBL_FLUSH_REQUEST 
;   9-Sep-2003 ;    added GBL_MM_UPSET
;  16-Oct-2003 ;    added GBL_PVSTART

; Layout of Global Memory -- ; top 32K of RAM (8000-FFFF)
GBL          equ 8000h+96   ; (allow 96 bytes for DMON)
;
; ==byte items
GBL_CMD_GROUP         equ GBL
GBL_CURRENT_SC_BUFFER equ GBL+1
GBL_SC_BUF1           equ GBL+2
GBL_SC_BUF2           equ GBL+3
GBL_MBR_REPLY         equ GBL+4
GBL_MM_Status         equ GBL+5
; 0 - off
; 1 - on
GBL_MMCB_Status       equ GBL+6
; 0 - not Formatted
; 1 - Formatted
GBL_TM_Status         equ GBL+7
; 0 - not allocated
; 1 - telemetry being generated
GBL_DCM_Status        equ GBL+8
; FF- not used -- raw data sent to ground
; 0 - off
; other codes set by DCM_TASK
GBL_TT_ABORT          equ GBL+9  ; 1=SAFE command aborting time-tagged
GBL_TM_IDLE           equ GBL+10  ; =1 - TM task is idle
GBL_TLM_CHANNEL       equ GBL+11
GBL_SCIENCE_MODE      equ GBL+12
MODE_STANDBY  equ 0
MODE_AUR      equ 1
MODE_SPRC     equ 2
MODE_SPRB     equ 3
MODE_DAYSIDE  equ 4      
GBL_TLM_ILK           equ GBL+13  ; 0=no, 1=ilk cmd rec, 2=switching
GBL_PPS_CTR           equ GBL+14  ; incremented by PPS interrupt
GBL_SC_SENDING        equ GBL+15  ; nonzero if PVCFs being sent to SC
;***GBL_ARMSW             equ GBL+16  ; bits used to re-arm triggers
GBL_MM_UPSET          equ GBL+16  ; =1 if MM upset detected
GBL_MULTIPLE          equ GBL+17  ; =1 allows multiple (follow-on) triggers
GBL_PVCF_ILK          equ GBL+18  ; =1 DCM task not allowed to start compress
GBL_DCM_IDLE          equ GBL+19  ; =1 - DCM task is idle
GBL_TEST              equ GBL+20
GBL_ECHO_DISABLE      equ GBL+21  ; =1 disables command echoes
GBL_DCTIMER           equ GBL+22  ; =1 downcounter timer expired
GBL_RO_IDLE           equ GBL+23  ; =1 no readouts still to be processed
GBL_SOH_WAIT          equ GBL+24  ; =1 SOH finishing hskp output

; 1-byte up-counter, incremented by the internal 1-Hz interrupt
GBL_SECONDS_CTR       equ GBL+25

; switches which direct certain packets
; via SOH, TM or both  (default is 0 - SOH-only)
GBL_703               equ GBL+26 ; Command Echo
GBL_705               equ GBL+27 ; TPA
GBL_709               equ GBL+28 ; Memory Dump
GBL_70B               equ GBL+29 ; MM Bad Section packet
GBL_719               equ GBL+30 ; Time-Tagged List Dump
GBL_71A               equ GBL+31 ; I_IN result
GBL_71B               equ GBL+32 ; CDI read result
GBL_71C               equ GBL+33 ; Monitor
GBL_71D               equ GBL+34 ; SOH
GBL_71E               equ GBL+35 ; Event Packet
GBL_720               equ GBL+36 ; Debug packet

GBL_FLUSH_REQUEST     equ GBL+37 
; 38..40 spare

; Camera Parameters
GBL_CAM               equ GBL+41   ; (30 bytes)
GBL_CAM_EXPOSURE      equ GBL_CAM  ; milliseconds (2 bytes)
GBL_CAM_INTERVAL      equ GBL_CAM+2 ; interval between exposures (seconds)
       
; Monitor Packet (ApID=71C) Data array 
; 170 bytes -- offset to "checksum" minus 10 (for sec hdr)
GBL_MON_ARRAY         equ GBL_CAM+30
GBL_MON               equ GBL_MON_ARRAY-10 ; data starting after 2ndary hdr 
;         (-10 makes offsets from GBL_MON agree with 8565 document)
;
; SOH Packet Data (ApID=71D) array 
; 236 bytes -- offset to "checksum" minus 10 (for sec hdr)
GBL_SOH_ARRAY         equ GBL_MON_ARRAY+170
GBL_SOH               equ GBL_SOH_ARRAY-10 ; data starting after 2ndary hdr 
;         (-10 makes offsets from GBL_SOH agree with 8565 document)

; assembled command (see CMD_IN.A)
; (max command packet is 224 bytes)
; assembled data is 206 = 224 - 10(sec hdr) - 6(prihdr) - 2(CK, TLR)
GBL_ASM               equ GBL_SOH_ARRAY+236

; processed command (see CMD.A) -- 208 bytes
GBL_CMD               equ GBL_ASM+206

; Bracketting Pair of TPA data
TPA_LENGTH  equ 42
GBL_TPA1              equ GBL_CMD+208
GBL_TPA2              equ GBL_TPA1+TPA_LENGTH

; Place to build Science Headers (256 bytes)
GBL_SCI_HDR           equ GBL_TPA2+TPA_LENGTH 

; Storage used in "mmcb.a" (100 bytes)
GBL_MMCB_MISC         equ GBL_SCI_HDR+256

; Storage used in "tm.a" (30 bytes)
GBL_TM_MISC           equ GBL_MMCB_MISC+100

; Queue allocations
; -----------------
GBL_QUEUES    equ     GBL_TM_MISC+30

; CMD bytes input (about 10 max-sized commands)
GBL_CMD_IN_QUEUE      equ GBL_QUEUES
GBL_CMD_IN_QUEUE_WRAP equ GBL_CMD_IN_QUEUE+2640
;
; Event queue (each element is: code, 6-byte time)
; (has to cover at least an SOH sampling interval)
; Allocate 500 elements
evqelt  equ 500*7
GBL_EVENT_QUEUE  equ  GBL_CMD_IN_QUEUE_WRAP
GBL_EVENT_QUEUE_WRAP  equ GBL_EVENT_QUEUE+evqelt
GBL_EVENT_QUEUE_STORE_PTR equ GBL_EVENT_QUEUE_WRAP ; ds 2

; 256-byte temporary re-use area for building 
; science packet headers, memory dumps etc.
GBL_TEMP              equ GBL_EVENT_QUEUE_STORE_PTR+2


;   [these parameters have been moved into the GBL_SOH area]
;
; Parameters used to generate the MMCBs
; and allocate Mass Memory
; 4-byte big endian Buffer Allocation sizes
GBL_CAM_NWB    EQU GBL_SOH+223  ; IDH_CAM_NWB
GBL_SPF_NWB    EQU GBL_SOH+227  ; IDH_SPF_NWB
GBL_SPS_NWB    EQU GBL_SOH+231  ; IDH_SPS_NWB
GBL_APH_NWB    EQU GBL_SOH+235  ; IDH_AP_NWB
; 4-byte big endian Actual Readout sizes
GBL_CAM_NWRO   EQU GBL_SOH+180  ; IDH_CAM_NWRO
GBL_SPF_NWRO   EQU GBL_SOH+184  ; IDH_SPF_NWRO
GBL_SPS_NWRO   EQU GBL_SOH+188  ; IDH_SPS_NWRO
GBL_APH_NWRO   EQU GBL_SOH+192  ; IDH_AP_NWRO

; 2-byte little endian counts of 
; how many MMCBs to allocate
GBL_N_CAM_MMCBS   EQU GBL_SOH+161 ; IDH_N_CAM_MMCBS
GBL_N_SPF_MMCBS   equ GBL_SOH+163 ; IDH_N_SPF_MMCBS
GBL_N_SPS_MMCBS   equ GBL_SOH+155 ; IDH_N_SPS_MMCBS
GBL_N_APH_MMCBS   equ GBL_SOH+157 ; IDH_N_AP_MMCBS

; number of samples per readout 
GBL_N_EXP  equ GBL_SOH+103      ; IDH_N_EXP (1 byte)
GBL_N_SPF  equ GBL_SOH+174      ; IDH_N_SPF (2 bytes, bigE)
GBL_N_SPS  equ GBL_SOH+176      ; IDH_N_SPS (2 bytes, bigE)          
GBL_N_APH  equ GBL_SOH+178      ; IDH_N_APH (2 bytes, bigE)


; 3-byte banked memory pointers to the first and last elements
; of the MMCB queues (these queues change in size)
GBL_CAM_SUPPLY_Q     equ GBL_TEMP+256
GBL_CAM_SUPPLY_QTAIL equ GBL_CAM_SUPPLY_Q+3
GBL_SPF_SUPPLY_Q     equ GBL_CAM_SUPPLY_QTAIL+3
GBL_SPF_SUPPLY_QTAIL equ GBL_SPF_SUPPLY_Q+3
GBL_SPS_SUPPLY_Q     equ GBL_SPF_SUPPLY_QTAIL+3
GBL_SPS_SUPPLY_QTAIL equ GBL_SPS_SUPPLY_Q+3
GBL_APH_SUPPLY_Q     equ GBL_SPS_SUPPLY_QTAIL+3
GBL_APH_SUPPLY_QTAIL equ GBL_APH_SUPPLY_Q+3
GBL_DCM_QHEAD        equ GBL_APH_SUPPLY_QTAIL+3
GBL_DCM_QTAIL        equ GBL_DCM_QHEAD+3
GBL_TM_QHEAD         equ GBL_DCM_QTAIL+3
GBL_TM_QTAIL         equ GBL_TM_QHEAD+3

; Stacks
stack_size  equ 180
GBL_SUPPLY_STACK     equ GBL_TM_QTAIL+3
GBL_BG_STACK         equ GBL_SUPPLY_STACK+stack_size
GBL_TM_STACK         equ GBL_BG_STACK+stack_size
GBL_SOH_STACK        equ GBL_TM_STACK+stack_size
GBL_SC_STACK         equ GBL_SOH_STACK+stack_size
GBL_DCM_STACK        equ GBL_SC_STACK+stack_size
GBL_HTR_STACK        equ GBL_DCM_STACK+stack_size
GBL_CMD_PROC_STACK   equ GBL_HTR_STACK+stack_size

; Place to build Event Packets
; count byte
; 8 event times
GBL_EVENT_DATA       equ GBL_CMD_PROC_STACK+stack_size
evdta  equ  8*10

; for building a PVCF
GBL_BPVCF  equ  GBL_EVENT_DATA+1+evdta
; (allocate 1108 bytes, plus 1 extra)

GBL_SCIENCE_START_TIME equ GBL_BPVCF+1109

; 1024 byte buffer used by /I_EEPROM_TO_MM
GBL_DSP_BUF   equ GBL_SCIENCE_START_TIME+6

; Copy of GBL_SOH_ARRAY used to hold data fixed
; while sending SOH packet (238 bytes)
GBL_SOH_COPY  equ GBL_DSP_BUF+1024

; 4 bytes of zero
GBL_zero       equ GBL_SOH_COPY+238

; MM addr of Base Parameter List (starts with status word)
GBL_BPL_MMADDR equ GBL_zero+4 ; (4 bytes)
; Contents of Base Parameter List ( 5 4-byte items)
GBL_BPL_STATUS equ GBL_BPL_MMADDR+4
GBL_BPL_PLB    equ GBL_BPL_STATUS+4
GBL_BPL_CMD    equ GBL_BPL_PLB+4
GBL_BPL_MMCB   equ GBL_BPL_CMD+4
GBL_BPL_DEBUG  equ GBL_BPL_MMCB+4

; addr of first readout area (not part of BPL)
GBL_RO_BASE    equ GBL_BPL_DEBUG+4 

; Initialization parameter array sent to DCM
; for packet-to-PVCF processing
GBL_PP_OP           equ GBL_RO_BASE+4
GBL_PP_MMSC1        equ GBL_PP_OP+4
GBL_PP_MMSC2        equ GBL_PP_MMSC1+4
GBL_PP_MAXNPVCFS    equ GBL_PP_MMSC2+4
GBL_PP_N_SC1        equ GBL_PP_MAXNPVCFS+4 
GBL_PP_N_SC2        equ GBL_PP_N_SC1+4
GBL_PP_VCFC         equ GBL_PP_N_SC2+4
GBL_PP_MMHDRS       equ GBL_PP_VCFC+4

; workspace (16 bytes) for CLOCK time converters
GBL_CLOCKWORK       equ GBL_PP_MMHDRS+4 

; IDC control bits (2 bytes)
GBL_IDC_CTRL        equ GBL_CLOCKWORK+16

; IDC Lightning and Cosmic ray
; threshhold parameters (CDI's 40..49)
GBL_IDC_LTHRESH     equ GBL_IDC_CTRL+2 ; 10 16-bit words
; Lightning Detect Control (2 bytes)
GBL_IDC_LDETECT     equ GBL_IDC_LTHRESH+20
; IDC SPS scaling (4 bytes)
GBL_IDC_SPS_SCALE   equ GBL_IDC_LDETECT+2

GBL_CCSDS   equ GBL_IDC_SPS_SCALE+4   ; 100 bytes
GBL_PVCF_PROM equ GBL_CCSDS+100  ; 60 bytes

; workspace in CMD.A
GBL_CMD_WORKSPACE equ GBL_PVCF_PROM+60  ; 300 bytes

; workspace for PWR routines in PROM
GBL_PWR     equ GBL_CMD_WORKSPACE+300 ; 11 bytes

; work area for HTR routines
GBL_HTR_WORK equ GBL_PWR+11     ; 40 bytes

; number of PVCFs last sent from SC buffers
GBL_N1      equ GBL_HTR_WORK+40 ; 2 bytes
GBL_N2      equ GBL_N1+2

; Analog Housekeeping Buffer (128 bytes)
GBL_IAM     equ GBL_N2+2

; 128 bytes for writing pages of EEPROM
GBL_128BYTES equ GBL_IAM+128

; 4 push levels for I_XGROUP (12 bytes)
GBL_XGS      equ GBL_128BYTES+128
; XGS stack pointer (2 bytes)
GBL_XGS_SP   equ GBL_XGS+12

; for use by code in "EEPROM.A"
GBL_EEPROM    equ GBL_XGS_SP+2 ; 8 bytes
 
GBL_WAIT_TIMEOUT equ GBL_EEPROM+8 ; 1 byte

; number of milliseconds delay between trigger events
; (little endian)
GBL_TRIGGER_DELAY  equ GBL_WAIT_TIMEOUT+1  ; 2-bytes 
GBL_DOING_TRIG_DELAY equ GBL_TRIGGER_DELAY+2 ; switch: 1 byte

; switch =0 if PVCF_START not yet called
GBL_PVSTART equ GBL_DOING_TRIG_DELAY+1  ; 1 byte

GBL_END   equ GBL_PVSTART+1
; lxi h,GBL_END


; Note: C000-C5FF reserved for debugger (see DEBHP.a)

; Allocate Debug Output Queue (bytes)
GBL_DTP_OUTQ          equ 0C600h
GBL_DTP_OUTQ_WRAP     equ 0CA00h


; 4096 bytes at top of memory
GBL_4K          equ 0F000h  


