ASM85: File = sc_p.a 10:18 4/25/2005 Page 1 1 0000: ;*** filter wheel patch removed 15-Apr-2005 2 0000: ;*** (used to generate p78F_epc.prc) 3 0000: 4 0000: ; ==== ISUAL Flight Software -- Univ of California, Berkeley, SSL ==== 5 0000: ; sc.a -- Management of Spacecraft Data Buffers 6 0000: org 22B9h ; (load-address of this module in FSW 7.8) 7 22B9: 8 22B9: ; 9 22B9: ; Revision History: 10 22B9: ; 18-Dec-2002 - SPG - ISUAL Flight Software rev 7.3 11 22B9: ; First Official Release 12 22B9: ; 7-Apr-2003 13 22B9: ; Activated interlock to prevent PVCF building 14 22B9: ; while PVCFs are being transmitted to the spacecraft 15 22B9: ; 29-May-2003 16 22B9: ; call CCSDS_HSKP instead of CCSDS_SEND 17 22B9: ; 6-Aug-2003 18 22B9: ; fixed bug in 4-byte add 19 22B9: ; 8-Aug-2003 20 22B9: ; new MM allocations 21 22B9: ; 11-Aug-03 - restored table from rev 7.6 22 22B9: ; 8-Oct-2003 - MAX_NPVCFS=3840 (was 4094) 23 22B9: ; 20-Oct-2003 24 22B9: ; restart buffer output order when there 25 22B9: ; has been an MM upset 26 22B9: ; 21-Oct-2003 27 22B9: ; - activate interlock of TM while SC is sending 28 22B9: ; - change max NPVCFS from 4094 to 4095 29 22B9: ; 30-Oct-2003 - abort buffer xmt if MM fault 30 22B9: 31 22B9: ; Astrium: Maximum number of PVCFs which may be sent to the 32 22B9: ; spacecraft in one transmission is 4095. 33 22B9: 34 22B9: ; 4095 x 1108/4 = 1134315 32-bit MM words 35 22B9: ; which is 114EEB in hex 36 22B9: 37 22B9: ; Low 10 bits of instrument buffer addresses must be zero, 38 22B9: ; so we make everything like that, and round up to 115000 hex 39 22B9: 40 22B9: ; Two Spacecraft Data Buffers are stored in Mass memory Page 2 41 22B9: ; Spacecraft data Buffer 1 is stored at the beginning 42 22B9: ; of Mass Memory (address 00000000h) 43 22B9: ; Spacecraft data Buffer 2 is stored following it 44 22B9: ; (at address 00115000h) 45 22B9: ; Next available memory is 0022A000h 46 22B9: 47 22B9: ; Compression List (16*11 = 176 words - B0h) 48 22B9: ; is located between the SC buffers at 00114EEB..00114F9A 49 22B9: 50 22B9: ; default MM allocation parameters 51 22B9: ; fields commented BPL_xxx are copied into GBL_BPL_xxx 52 22B9: ; (these are written to the DCM during initialization) 53 22B9: ; fields commented PP_xxx are copied into GBL_PP_xxx 54 22B9: ; (these are written to the DCM when PVCF processing is initialized) 55 22B9: default_BPL: 56 22B9: ; MM addr of Status word 57 22B9: 00 22 A0 00 db 00h,022h,0A0h,000h ; BPL_STATUS 58 22BD: ; MM addr of Program Load Block (4 words, followed by data array) 59 22BD: 00 22 A0 01 db 00h,022h,0A0h,001h ; BPL_PLB 60 22C1: ; MM addr of PVCF command list (allow 32 words) 61 22C1: 00 22 A3 00 db 00h,022h,0A3h,000h ; BPL_CMD 62 22C5: ; MM addr of MMCB list (16 44-byte MMCBs = 176 words - B0h) 63 22C5: 00 11 4E EB db 00h,011h,04Eh,0EBh ; BPL_MMCB 64 22C9: ; MM addr of debug word (1 word) 65 22C9: 00 22 A3 20 db 00h,022h,0A3h,020h ; BPL_DEBUG 66 22CD: ; MM addr of start of readout allocations 67 22CD: ; (low 10 bits must be zero) 68 22CD: 00 22 A4 00 db 00h,022h,0A4h,000h ; (to GBL_RO_BASE) 69 22D1: default_PP: 70 22D1: ; op=0 71 22D1: 00 00 00 00 db 0,0,0,0 ; PP_OP 72 22D5: ; addr of 1st Spacecraft Buffer 73 22D5: 00 00 00 00 db 00h,000h,000h,000h ; PP_MMSC1 74 22D9: ; addr of 2nd Spacecraft Buffer 75 22D9: 00 11 50 00 db 00h,011h,050h,000h ; PP_MMSC2 76 22DD: ; max number of PVCFs per buffer 77 22DD: 00 00 0F FF db 00h,000h,0Fh,0FFh ; PP_MAXNPVCFS (4095) 78 22E1: ; addr of word giving current number of PVCFs in SC1 79 22E1: 00 22 A3 21 db 00h,022h,0A3h,021h ; PP_N_SC1 80 22E5: ; addr of word giving current number of PVCFs in SC2 81 22E5: 00 22 A3 22 db 00h,022h,0A3h,022h ; PP_N_SC2 82 22E9: ; Virtual Channel Frame Counter to assign to next PVCF 83 22E9: 00 00 00 00 db 0,0,0,0 ; PP_N_VCFC 84 22ED: ; addr where Packet headers will be stored by DPU (20 bytes- 5 words) 85 22ED: 00 22 A3 24 db 00h,022h,0A3h,024h ; PP_N_MMHDRS 86 22F1: 87 22F1: include sc.i 1 22F1: ; sc.i 2 22F1: PUBLIC SC_INIT 3 22F1: PUBLIC SC_FLUSH 4 22F1: PUBLIC SC_SEND_MBR 5 22F1: 88 22F1: include ccsds.i 1 22F1: ; CCSDS.i 2 22F1: public CCSDS_INIT 3 22F1: public CCSDS_HSKP 4 22F1: public CCSDS_SCIHDR Page 3 5 22F1: public CCSDS_SCIDATA 6 22F1: 89 22F1: include pvcf.i 1 22F1: ; pvcf.i 2 22F1: public PVCF_INIT 3 22F1: public PVCF_START 4 22F1: public PVCF_DPU 5 22F1: public PVCF_MM 6 22F1: public PVCF_FLUSH 7 22F1: 90 22F1: include mm.i 1 22F1: ; mm.i -- Mass memory 2 22F1: PUBLIC MM_INIT 3 22F1: PUBLIC MM_FETCH 4 22F1: PUBLIC MM_STORE 5 22F1: PUBLIC MM_ON 6 22F1: PUBLIC MM_OFF 7 22F1: PUBLIC MM_TEST 8 22F1: 91 22F1: include clock.i 1 22F1: ; clock.i - DPU Time-of-Day clock 2 22F1: ; 3 22F1: public CLOCK_INIT 4 22F1: public CLOCK_SET 5 22F1: public CLOCK_READ 6 22F1: public CLOCK_10_TO_6 7 22F1: public CLOCK_6_TO_10 8 22F1: ; 92 22F1: include task.i 1 22F1: ; task.i -- Task switcher 2 22F1: PUBLIC TASK_INIT 3 22F1: PUBLIC TASK_NEW 4 22F1: PUBLIC TASK 5 22F1: 93 22F1: include util.i 1 22F1: public COPY_BYTES 2 22F1: public SUB16 3 22F1: public WAIT_1MS 4 22F1: public INCBIG 5 22F1: public DECBIG 6 22F1: 94 22F1: include gbl.i 1 22F1: ; GBL.i -- global memory allocations 2 22F1: 3 22F1: ; Revision History: 4 22F1: ; 18-Dec-2002 - SPG - ISUAL Flight Software rev 7.3 5 22F1: ; First Official Release 6 22F1: ; 28-Dec-2002 Page 4 7 22F1: ; added GBL_720 8 22F1: ; 11-Jan-2003 9 22F1: ; added GBL_XGS, GBL_XGS_SP 10 22F1: ; 12-Jan-2003 11 22F1: ; added GBL_RO_IDLE 12 22F1: ; added GBL_SOH_WAIT 13 22F1: ; 15-Jan-2003 14 22F1: ; added GBL_EEPROM 15 22F1: ; added GBL_WAIT_TIMEOUT 16 22F1: ; 14-Feb-2003 17 22F1: ; added GBL_TRIGGER_DELAY 18 22F1: ; added GBL_DOING_TRIG_DELAY 19 22F1: ; removed GBL_ARMSW 20 22F1: ; 19-May-2003 ; added GBL_FLUSH_REQUEST 21 22F1: ; 9-Sep-2003 ; added GBL_MM_UPSET 22 22F1: ; 16-Oct-2003 ; added GBL_PVSTART 23 22F1: 24 22F1: ; Layout of Global Memory -- ; top 32K of RAM (8000-FFFF) 25 22F1: GBL equ 8000h+96 ; (allow 96 bytes for DMON) 26 22F1: ; 27 22F1: ; ==byte items 28 22F1: GBL_CMD_GROUP equ GBL 29 22F1: GBL_CURRENT_SC_BUFFER equ GBL+1 30 22F1: GBL_SC_BUF1 equ GBL+2 31 22F1: GBL_SC_BUF2 equ GBL+3 32 22F1: GBL_MBR_REPLY equ GBL+4 33 22F1: GBL_MM_Status equ GBL+5 34 22F1: ; 0 - off 35 22F1: ; 1 - on 36 22F1: GBL_MMCB_Status equ GBL+6 37 22F1: ; 0 - not Formatted 38 22F1: ; 1 - Formatted 39 22F1: GBL_TM_Status equ GBL+7 40 22F1: ; 0 - not allocated 41 22F1: ; 1 - telemetry being generated 42 22F1: GBL_DCM_Status equ GBL+8 43 22F1: ; FF- not used -- raw data sent to ground 44 22F1: ; 0 - off 45 22F1: ; other codes set by DCM_TASK 46 22F1: GBL_TT_ABORT equ GBL+9 ; 1=SAFE command aborting time-tagged 47 22F1: GBL_TM_IDLE equ GBL+10 ; =1 - TM task is idle 48 22F1: GBL_TLM_CHANNEL equ GBL+11 49 22F1: GBL_SCIENCE_MODE equ GBL+12 50 22F1: MODE_STANDBY equ 0 51 22F1: MODE_AUR equ 1 52 22F1: MODE_SPRC equ 2 53 22F1: MODE_SPRB equ 3 54 22F1: MODE_DAYSIDE equ 4 55 22F1: GBL_TLM_ILK equ GBL+13 ; 0=no, 1=ilk cmd rec, 2=switching 56 22F1: GBL_PPS_CTR equ GBL+14 ; incremented by PPS interrupt 57 22F1: GBL_SC_SENDING equ GBL+15 ; nonzero if PVCFs being sent to SC 58 22F1: ;***GBL_ARMSW equ GBL+16 ; bits used to re-arm triggers 59 22F1: GBL_MM_UPSET equ GBL+16 ; =1 if MM upset detected 60 22F1: GBL_MULTIPLE equ GBL+17 ; =1 allows multiple (follow-on) triggers 61 22F1: GBL_PVCF_ILK equ GBL+18 ; =1 DCM task not allowed to start compress 62 22F1: GBL_DCM_IDLE equ GBL+19 ; =1 - DCM task is idle 63 22F1: GBL_TEST equ GBL+20 64 22F1: GBL_ECHO_DISABLE equ GBL+21 ; =1 disables command echoes 65 22F1: GBL_DCTIMER equ GBL+22 ; =1 downcounter timer expired 66 22F1: GBL_RO_IDLE equ GBL+23 ; =1 no readouts still to be processed Page 5 67 22F1: GBL_SOH_WAIT equ GBL+24 ; =1 SOH finishing hskp output 68 22F1: 69 22F1: ; 1-byte up-counter, incremented by the internal 1-Hz interrupt 70 22F1: GBL_SECONDS_CTR equ GBL+25 71 22F1: 72 22F1: ; switches which direct certain packets 73 22F1: ; via SOH, TM or both (default is 0 - SOH-only) 74 22F1: GBL_703 equ GBL+26 ; Command Echo 75 22F1: GBL_705 equ GBL+27 ; TPA 76 22F1: GBL_709 equ GBL+28 ; Memory Dump 77 22F1: GBL_70B equ GBL+29 ; MM Bad Section packet 78 22F1: GBL_719 equ GBL+30 ; Time-Tagged List Dump 79 22F1: GBL_71A equ GBL+31 ; I_IN result 80 22F1: GBL_71B equ GBL+32 ; CDI read result 81 22F1: GBL_71C equ GBL+33 ; Monitor 82 22F1: GBL_71D equ GBL+34 ; SOH 83 22F1: GBL_71E equ GBL+35 ; Event Packet 84 22F1: GBL_720 equ GBL+36 ; Debug packet 85 22F1: 86 22F1: GBL_FLUSH_REQUEST equ GBL+37 87 22F1: ; 38..40 spare 88 22F1: 89 22F1: ; Camera Parameters 90 22F1: GBL_CAM equ GBL+41 ; (30 bytes) 91 22F1: GBL_CAM_EXPOSURE equ GBL_CAM ; milliseconds (2 bytes) 92 22F1: GBL_CAM_INTERVAL equ GBL_CAM+2 ; interval between exposures (seconds) 93 22F1: 94 22F1: ; Monitor Packet (ApID=71C) Data array 95 22F1: ; 170 bytes -- offset to "checksum" minus 10 (for sec hdr) 96 22F1: GBL_MON_ARRAY equ GBL_CAM+30 97 22F1: GBL_MON equ GBL_MON_ARRAY-10 ; data starting after 2ndary hdr 98 22F1: ; (-10 makes offsets from GBL_MON agree with 8565 document) 99 22F1: ; 100 22F1: ; SOH Packet Data (ApID=71D) array 101 22F1: ; 236 bytes -- offset to "checksum" minus 10 (for sec hdr) 102 22F1: GBL_SOH_ARRAY equ GBL_MON_ARRAY+170 103 22F1: GBL_SOH equ GBL_SOH_ARRAY-10 ; data starting after 2ndary hdr 104 22F1: ; (-10 makes offsets from GBL_SOH agree with 8565 document) 105 22F1: 106 22F1: ; assembled command (see CMD_IN.A) 107 22F1: ; (max command packet is 224 bytes) 108 22F1: ; assembled data is 206 = 224 - 10(sec hdr) - 6(prihdr) - 2(CK, TLR) 109 22F1: GBL_ASM equ GBL_SOH_ARRAY+236 110 22F1: 111 22F1: ; processed command (see CMD.A) -- 208 bytes 112 22F1: GBL_CMD equ GBL_ASM+206 113 22F1: 114 22F1: ; Bracketting Pair of TPA data 115 22F1: TPA_LENGTH equ 42 116 22F1: GBL_TPA1 equ GBL_CMD+208 117 22F1: GBL_TPA2 equ GBL_TPA1+TPA_LENGTH 118 22F1: 119 22F1: ; Place to build Science Headers (256 bytes) 120 22F1: GBL_SCI_HDR equ GBL_TPA2+TPA_LENGTH 121 22F1: 122 22F1: ; Storage used in "mmcb.a" (100 bytes) 123 22F1: GBL_MMCB_MISC equ GBL_SCI_HDR+256 124 22F1: 125 22F1: ; Storage used in "tm.a" (30 bytes) 126 22F1: GBL_TM_MISC equ GBL_MMCB_MISC+100 Page 6 127 22F1: 128 22F1: ; Queue allocations 129 22F1: ; ----------------- 130 22F1: GBL_QUEUES equ GBL_TM_MISC+30 131 22F1: 132 22F1: ; CMD bytes input (about 10 max-sized commands) 133 22F1: GBL_CMD_IN_QUEUE equ GBL_QUEUES 134 22F1: GBL_CMD_IN_QUEUE_WRAP equ GBL_CMD_IN_QUEUE+2640 135 22F1: ; 136 22F1: ; Event queue (each element is: code, 6-byte time) 137 22F1: ; (has to cover at least an SOH sampling interval) 138 22F1: ; Allocate 500 elements 139 22F1: evqelt equ 500*7 140 22F1: GBL_EVENT_QUEUE equ GBL_CMD_IN_QUEUE_WRAP 141 22F1: GBL_EVENT_QUEUE_WRAP equ GBL_EVENT_QUEUE+evqelt 142 22F1: GBL_EVENT_QUEUE_STORE_PTR equ GBL_EVENT_QUEUE_WRAP ; ds 2 143 22F1: 144 22F1: ; 256-byte temporary re-use area for building 145 22F1: ; science packet headers, memory dumps etc. 146 22F1: GBL_TEMP equ GBL_EVENT_QUEUE_STORE_PTR+2 147 22F1: 148 22F1: 149 22F1: ; [these parameters have been moved into the GBL_SOH area] 150 22F1: ; 151 22F1: ; Parameters used to generate the MMCBs 152 22F1: ; and allocate Mass Memory 153 22F1: ; 4-byte big endian Buffer Allocation sizes 154 22F1: GBL_CAM_NWB EQU GBL_SOH+223 ; IDH_CAM_NWB 155 22F1: GBL_SPF_NWB EQU GBL_SOH+227 ; IDH_SPF_NWB 156 22F1: GBL_SPS_NWB EQU GBL_SOH+231 ; IDH_SPS_NWB 157 22F1: GBL_APH_NWB EQU GBL_SOH+235 ; IDH_AP_NWB 158 22F1: ; 4-byte big endian Actual Readout sizes 159 22F1: GBL_CAM_NWRO EQU GBL_SOH+180 ; IDH_CAM_NWRO 160 22F1: GBL_SPF_NWRO EQU GBL_SOH+184 ; IDH_SPF_NWRO 161 22F1: GBL_SPS_NWRO EQU GBL_SOH+188 ; IDH_SPS_NWRO 162 22F1: GBL_APH_NWRO EQU GBL_SOH+192 ; IDH_AP_NWRO 163 22F1: 164 22F1: ; 2-byte little endian counts of 165 22F1: ; how many MMCBs to allocate 166 22F1: GBL_N_CAM_MMCBS EQU GBL_SOH+161 ; IDH_N_CAM_MMCBS 167 22F1: GBL_N_SPF_MMCBS equ GBL_SOH+163 ; IDH_N_SPF_MMCBS 168 22F1: GBL_N_SPS_MMCBS equ GBL_SOH+155 ; IDH_N_SPS_MMCBS 169 22F1: GBL_N_APH_MMCBS equ GBL_SOH+157 ; IDH_N_AP_MMCBS 170 22F1: 171 22F1: ; number of samples per readout 172 22F1: GBL_N_EXP equ GBL_SOH+103 ; IDH_N_EXP (1 byte) 173 22F1: GBL_N_SPF equ GBL_SOH+174 ; IDH_N_SPF (2 bytes, bigE) 174 22F1: GBL_N_SPS equ GBL_SOH+176 ; IDH_N_SPS (2 bytes, bigE) 175 22F1: GBL_N_APH equ GBL_SOH+178 ; IDH_N_APH (2 bytes, bigE) 176 22F1: 177 22F1: 178 22F1: ; 3-byte banked memory pointers to the first and last elements 179 22F1: ; of the MMCB queues (these queues change in size) 180 22F1: GBL_CAM_SUPPLY_Q equ GBL_TEMP+256 181 22F1: GBL_CAM_SUPPLY_QTAIL equ GBL_CAM_SUPPLY_Q+3 182 22F1: GBL_SPF_SUPPLY_Q equ GBL_CAM_SUPPLY_QTAIL+3 183 22F1: GBL_SPF_SUPPLY_QTAIL equ GBL_SPF_SUPPLY_Q+3 184 22F1: GBL_SPS_SUPPLY_Q equ GBL_SPF_SUPPLY_QTAIL+3 185 22F1: GBL_SPS_SUPPLY_QTAIL equ GBL_SPS_SUPPLY_Q+3 186 22F1: GBL_APH_SUPPLY_Q equ GBL_SPS_SUPPLY_QTAIL+3 Page 7 187 22F1: GBL_APH_SUPPLY_QTAIL equ GBL_APH_SUPPLY_Q+3 188 22F1: GBL_DCM_QHEAD equ GBL_APH_SUPPLY_QTAIL+3 189 22F1: GBL_DCM_QTAIL equ GBL_DCM_QHEAD+3 190 22F1: GBL_TM_QHEAD equ GBL_DCM_QTAIL+3 191 22F1: GBL_TM_QTAIL equ GBL_TM_QHEAD+3 192 22F1: 193 22F1: ; Stacks 194 22F1: stack_size equ 180 195 22F1: GBL_SUPPLY_STACK equ GBL_TM_QTAIL+3 196 22F1: GBL_BG_STACK equ GBL_SUPPLY_STACK+stack_size 197 22F1: GBL_TM_STACK equ GBL_BG_STACK+stack_size 198 22F1: GBL_SOH_STACK equ GBL_TM_STACK+stack_size 199 22F1: GBL_SC_STACK equ GBL_SOH_STACK+stack_size 200 22F1: GBL_DCM_STACK equ GBL_SC_STACK+stack_size 201 22F1: GBL_HTR_STACK equ GBL_DCM_STACK+stack_size 202 22F1: GBL_CMD_PROC_STACK equ GBL_HTR_STACK+stack_size 203 22F1: 204 22F1: ; Place to build Event Packets 205 22F1: ; count byte 206 22F1: ; 8 event times 207 22F1: GBL_EVENT_DATA equ GBL_CMD_PROC_STACK+stack_size 208 22F1: evdta equ 8*10 209 22F1: 210 22F1: ; for building a PVCF 211 22F1: GBL_BPVCF equ GBL_EVENT_DATA+1+evdta 212 22F1: ; (allocate 1108 bytes, plus 1 extra) 213 22F1: 214 22F1: GBL_SCIENCE_START_TIME equ GBL_BPVCF+1109 215 22F1: 216 22F1: ; 1024 byte buffer used by /I_EEPROM_TO_MM 217 22F1: GBL_DSP_BUF equ GBL_SCIENCE_START_TIME+6 218 22F1: 219 22F1: ; Copy of GBL_SOH_ARRAY used to hold data fixed 220 22F1: ; while sending SOH packet (238 bytes) 221 22F1: GBL_SOH_COPY equ GBL_DSP_BUF+1024 222 22F1: 223 22F1: ; 4 bytes of zero 224 22F1: GBL_zero equ GBL_SOH_COPY+238 225 22F1: 226 22F1: ; MM addr of Base Parameter List (starts with status word) 227 22F1: GBL_BPL_MMADDR equ GBL_zero+4 ; (4 bytes) 228 22F1: ; Contents of Base Parameter List ( 5 4-byte items) 229 22F1: GBL_BPL_STATUS equ GBL_BPL_MMADDR+4 230 22F1: GBL_BPL_PLB equ GBL_BPL_STATUS+4 231 22F1: GBL_BPL_CMD equ GBL_BPL_PLB+4 232 22F1: GBL_BPL_MMCB equ GBL_BPL_CMD+4 233 22F1: GBL_BPL_DEBUG equ GBL_BPL_MMCB+4 234 22F1: 235 22F1: ; addr of first readout area (not part of BPL) 236 22F1: GBL_RO_BASE equ GBL_BPL_DEBUG+4 237 22F1: 238 22F1: ; Initialization parameter array sent to DCM 239 22F1: ; for packet-to-PVCF processing 240 22F1: GBL_PP_OP equ GBL_RO_BASE+4 241 22F1: GBL_PP_MMSC1 equ GBL_PP_OP+4 242 22F1: GBL_PP_MMSC2 equ GBL_PP_MMSC1+4 243 22F1: GBL_PP_MAXNPVCFS equ GBL_PP_MMSC2+4 244 22F1: GBL_PP_N_SC1 equ GBL_PP_MAXNPVCFS+4 245 22F1: GBL_PP_N_SC2 equ GBL_PP_N_SC1+4 246 22F1: GBL_PP_VCFC equ GBL_PP_N_SC2+4 Page 8 247 22F1: GBL_PP_MMHDRS equ GBL_PP_VCFC+4 248 22F1: 249 22F1: ; workspace (16 bytes) for CLOCK time converters 250 22F1: GBL_CLOCKWORK equ GBL_PP_MMHDRS+4 251 22F1: 252 22F1: ; IDC control bits (2 bytes) 253 22F1: GBL_IDC_CTRL equ GBL_CLOCKWORK+16 254 22F1: 255 22F1: ; IDC Lightning and Cosmic ray 256 22F1: ; threshhold parameters (CDI's 40..49) 257 22F1: GBL_IDC_LTHRESH equ GBL_IDC_CTRL+2 ; 10 16-bit words 258 22F1: ; Lightning Detect Control (2 bytes) 259 22F1: GBL_IDC_LDETECT equ GBL_IDC_LTHRESH+20 260 22F1: ; IDC SPS scaling (4 bytes) 261 22F1: GBL_IDC_SPS_SCALE equ GBL_IDC_LDETECT+2 262 22F1: 263 22F1: GBL_CCSDS equ GBL_IDC_SPS_SCALE+4 ; 100 bytes 264 22F1: GBL_PVCF_PROM equ GBL_CCSDS+100 ; 60 bytes 265 22F1: 266 22F1: ; workspace in CMD.A 267 22F1: GBL_CMD_WORKSPACE equ GBL_PVCF_PROM+60 ; 300 bytes 268 22F1: 269 22F1: ; workspace for PWR routines in PROM 270 22F1: GBL_PWR equ GBL_CMD_WORKSPACE+300 ; 11 bytes 271 22F1: 272 22F1: ; work area for HTR routines 273 22F1: GBL_HTR_WORK equ GBL_PWR+11 ; 40 bytes 274 22F1: 275 22F1: ; number of PVCFs last sent from SC buffers 276 22F1: GBL_N1 equ GBL_HTR_WORK+40 ; 2 bytes 277 22F1: GBL_N2 equ GBL_N1+2 278 22F1: 279 22F1: ; Analog Housekeeping Buffer (128 bytes) 280 22F1: GBL_IAM equ GBL_N2+2 281 22F1: 282 22F1: ; 128 bytes for writing pages of EEPROM 283 22F1: GBL_128BYTES equ GBL_IAM+128 284 22F1: 285 22F1: ; 4 push levels for I_XGROUP (12 bytes) 286 22F1: GBL_XGS equ GBL_128BYTES+128 287 22F1: ; XGS stack pointer (2 bytes) 288 22F1: GBL_XGS_SP equ GBL_XGS+12 289 22F1: 290 22F1: ; for use by code in "EEPROM.A" 291 22F1: GBL_EEPROM equ GBL_XGS_SP+2 ; 8 bytes 292 22F1: 293 22F1: GBL_WAIT_TIMEOUT equ GBL_EEPROM+8 ; 1 byte 294 22F1: 295 22F1: ; number of milliseconds delay between trigger events 296 22F1: ; (little endian) 297 22F1: GBL_TRIGGER_DELAY equ GBL_WAIT_TIMEOUT+1 ; 2-bytes 298 22F1: GBL_DOING_TRIG_DELAY equ GBL_TRIGGER_DELAY+2 ; switch: 1 byte 299 22F1: 300 22F1: ; switch =0 if PVCF_START not yet called 301 22F1: GBL_PVSTART equ GBL_DOING_TRIG_DELAY+1 ; 1 byte 302 22F1: 303 22F1: GBL_END equ GBL_PVSTART+1 304 22F1: ; lxi h,GBL_END 305 22F1: 306 22F1: Page 9 307 22F1: ; Note: C000-C5FF reserved for debugger (see DEBHP.a) 308 22F1: 309 22F1: ; Allocate Debug Output Queue (bytes) 310 22F1: GBL_DTP_OUTQ equ 0C600h 311 22F1: GBL_DTP_OUTQ_WRAP equ 0CA00h 312 22F1: 313 22F1: 314 22F1: ; 4096 bytes at top of memory 315 22F1: GBL_4K equ 0F000h 316 22F1: 317 22F1: 95 22F1: include debug.i 1 22F1: ; debug.i (uses DEBUG.A/DEBHP.A) 2 22F1: public DEBUG_DISABLE 3 22F1: public DEBUG_INIT 4 22F1: public DEBUG_PUTBYTE 5 22F1: public DEBUG_SHOW 6 22F1: public DEBUG_DUMP 7 22F1: public DEBUG_ASC 8 22F1: public DEBUG_ASC_HL 9 22F1: public DEBUG_ASC_DEC 10 22F1: public DEBUG_SHOWUT 11 22F1: public DEBUG_SHOWA 12 22F1: public DEBUG_REGSET 13 22F1: 96 22F1: include ioports.i 1 22F1: ; ioports.i -- definitions of ISUAL DPU I/O ports 2 22F1: ; 3 22F1: ; 19 FEB 2002 4 22F1: ; CAI 5 22F1: ; Revised 20 March 2002 6 22F1: ; SPG 7 22F1: ; 8 22F1: ; _O = output port, _I = input port 9 22F1: ; 10 22F1: ; Ports 00-7Fh are in the ISDPGLU Actel: 11 22F1: ; 12 22F1: SOFTWARE_RESET_O EQU 00h ; forces hardware reset 13 22F1: INTVECTOR_STS_I EQU 00h ; C7, CF, D7, ... , FF 14 22F1: IRQ_ENABLE_O EQU 01h ; set RST[7:2] interrupt request enables 15 22F1: IRQ_ENABLE_I EQU 01h ; read RST[7:2] interrupt request enables 16 22F1: BANK_SELECT_O EQU 02h ; memory bank select for CPU addr 4000-7FFF 17 22F1: BANK_SELECT_I EQU 02h ; memory bank select for CPU addr 4000-7FFF 18 22F1: WATCHDOG_PET_O EQU 03h ; pet watchdog timer, data =xx 19 22F1: WATCHDOG_STS_I EQU 03h ; [7:4]=bites, [3:0]=barks 20 22F1: CMD_RX_I EQU 04h ; command UART rx data 21 22F1: SOH_TX_O EQU 04h ; SOH UART tx data 22 22F1: CMD_SOH_CTRL_O EQU 05h ; CMD/SOH UART control 23 22F1: CMD_SOH_STS_I EQU 05h ; CMD/SOH UART status 24 22F1: PROM_ENBL_O EQU 06h ; PROM enable 25 22F1: STATUS6_I EQU 06h ; PROM/reset/CDI/HKP/PS16 status 26 22F1: IRQ_LEVELS_I EQU 07h ; RST[7:2] raw levels 27 22F1: ; 28 22F1: MM_IM_DCM_CTL_O EQU 08h ; MM/Imager/DCM control 29 22F1: MM_IM_DCM_STS_I EQU 08h ; MM/Imager/DCM status 30 22F1: IDC_RESET_I EQU 09h ; IDC Reset Page 10 31 22F1: IDC_RESET_O EQU 09h ; IDC Reset 32 22F1: ; (0Ah-0Bh not used) 33 22F1: RES_FLAG_CLR_O EQU 0Ch ; clear SWR, POR flags 34 22F1: ONE_HZ_CLR_O EQU 0Dh ; clear 1-Hz IRQ latch 35 22F1: TIMER_SET_L_O EQU 0Eh ; 1024-Hz countdown timer low byte 36 22F1: TIMER_SET_H_O EQU 0Fh ; 1024-Hz countdown timer high byte 37 22F1: ; 38 22F1: ; (10h-3Fh not used) 39 22F1: ; 40 22F1: CDI_DAT_LO_O EQU 40h ; CDI data low byte 41 22F1: CDI_DAT_HI_O EQU 41h ; CDI data high byte 42 22F1: CDI_CMD_O EQU 42h ; CDI readback command (write last) 43 22F1: CDI_DAT_LO_I EQU 40h ; CDI readback low byte 44 22F1: CDI_DAT_HI_I EQU 41h ; CDI readback high byte 45 22F1: PWR_STS_LO_I EQU 42h ; power service [7:0] status 46 22F1: PWR_STS_HI_I EQU 43h ; power service [15:8] status 47 22F1: ; (44h-5Fh not used) 48 22F1: ; 49 22F1: MM_BADR_0700_O EQU 60h ; mass mem block base address [7:0] 50 22F1: MM_BADR_1508_O EQU 61h ; mass mem block base address [15:8] 51 22F1: MM_BADR_2316_O EQU 62h ; mass mem block base address [23:16] 52 22F1: MM_BADR_3124_O EQU 63h ; mass mem block base address [31:24] 53 22F1: MM_WADR_0700_I EQU 60h ; mass mem working address [7:0] 54 22F1: MM_WADR_1508_I EQU 61h ; mass mem working address [15:8] 55 22F1: MM_WADR_2316_I EQU 62h ; mass mem working address [23:16] 56 22F1: MM_WADR_3124_I EQU 63h ; mass mem working address [31:24] 57 22F1: ; (64h-6Fh not used) 58 22F1: ; 59 22F1: SC_TIME_0_O EQU 70h ; set S/C time 2^-16 seconds (write 1st) 60 22F1: SC_TIME_1_O EQU 71h ; set S/C time 2^-8 seconds 61 22F1: SC_TIME_2_O EQU 72h ; set S/C time 2^0 seconds 62 22F1: SC_TIME_3_O EQU 73h ; set S/C time 2^8 seconds 63 22F1: SC_TIME_4_O EQU 74h ; set S/C time 2^16 seconds 64 22F1: SC_TIME_5_O EQU 75h ; set S/C time 2^24 seconds (write last) 65 22F1: ; 66 22F1: SC_TIME_0_I EQU 70h ; read S/C time 2^-16 seconds (read 1st) 67 22F1: SC_TIME_1_I EQU 71h ; read S/C time 2^-8 seconds 68 22F1: SC_TIME_2_I EQU 72h ; read S/C time 2^0 seconds 69 22F1: SC_TIME_3_I EQU 73h ; read S/C time 2^8 seconds 70 22F1: SC_TIME_4_I EQU 74h ; read S/C time 2^16 seconds 71 22F1: SC_TIME_5_I EQU 75h ; read S/C time 2^24 seconds (read last) 72 22F1: ; 73 22F1: SCIF_CTL_O EQU 76h ; S/C I/F control (NOM/RED, PPS) 74 22F1: SCIF_STS_I EQU 76h ; S/C I/F status (NOM/RED, PPS, SCT fault) 75 22F1: ISDPGLU_REV_I EQU 77h ; ISDPGLU Actel revision 76 22F1: ; (78h-7Fh not used) 77 22F1: ; 78 22F1: ; Ports 80-BFh are in the ISDPPWR Actel: 79 22F1: ; 80 22F1: ISDPPWR_REV_I EQU 80h ; ISDPPWR Actel revision 81 22F1: FW_STS_I EQU 81h ; filter wheel position status 82 22F1: FW_CNTR_O EQU 82h ; set filter wheel counter (N-1 @ 1280 Hz) 83 22F1: FW_CNTR_I EQU 83h ; read filter wheel counter (N-1 @ 1280 Hz) 84 22F1: FW_CTL_O EQU 83h ; filter wheel & stepper motor control 85 22F1: FW_CTL_I EQU 83h ; filter wheel & stepper motor status 86 22F1: 87 22F1: HKP_DAT_0_I EQU 84h ; 1st housekeeping byte from power controller 88 22F1: HKP_DAT_1_I EQU 85h ; 2nd housekeeping byte from power controller 89 22F1: HKP_DAT_2_I EQU 86h ; 3rd housekeeping byte from power controller 90 22F1: HKP_DAT_3_I EQU 87h ; 4th housekeeping byte from power controller Page 11 91 22F1: AP_PWR_NOM_O EQU 84h ; set AP to nominal power 92 22F1: AP_PWR_RED_O EQU 85h ; set AP to redundant power 93 22F1: AP_PWR_OFF_O EQU 86h ; set AP +28V power off 94 22F1: AP_PWR_ON_O EQU 87h ; set AP +28V power on 95 22F1: HKP_CTL_O EQU 88h ; housekeeping transfer control 96 22F1: HKP_STS_I EQU 88h ; housekeeping transfer status 97 22F1: STIM_CTL_I equ 89h 98 22F1: STIM_CTL_O EQU 89h ; Imager, SP stim control 99 22F1: HVERR_STS_I equ 8Ah 100 22F1: HVERR_CLR_O equ 8Ah 101 22F1: ; (unused) equ 8Bh 102 22F1: DAY_LAT_STS_I EQU 8Ch ; day sensor latch status 103 22F1: DAY_LAT_CLR_O EQU 8Ch ; clear day sensor latches 104 22F1: DAY_SENS_CTL_O EQU 8Dh 105 22F1: DAY_SENS_STS_I EQU 8Dh ; day sensor raw status 106 22F1: DAY1_THR_I equ 8Eh 107 22F1: DAY1_THR_O equ 8Eh 108 22F1: DAY2_THR_I equ 8Fh 109 22F1: DAY2_THR_O equ 8Fh 110 22F1: MCP_DAY_I equ 90h 111 22F1: MCP_DAY_O equ 90h 112 22F1: MCP_NITE_1_I equ 91h 113 22F1: MCP_NITE_1_O equ 91h 114 22F1: MCP_NITE_2_I equ 92h 115 22F1: MCP_NITE_2_O equ 92h 116 22F1: MCP_NITE_3_I equ 93h 117 22F1: MCP_NITE_3_O equ 93h 118 22F1: MCP_NITE_4_I equ 94h 119 22F1: MCP_NITE_4_O equ 94h 120 22F1: MCP_NITE_5_I equ 95h 121 22F1: MCP_NITE_5_O equ 95h 122 22F1: MCP_NITE_6_I equ 96h 123 22F1: MCP_NITE_6_O equ 96h 124 22F1: MCP_NITE_7_I equ 97h 125 22F1: MCP_NITE_7_O equ 97h 126 22F1: MCP_MAX_I equ 98h 127 22F1: MCP_MAX_O equ 98h 128 22F1: MCP_DAC_I equ 99h 129 22F1: HV_CNTR_I equ 9Ah 130 22F1: HV_CNTR_O equ 9Ah 131 22F1: HV_STS_I equ 9Bh 132 22F1: HV_CTL_O equ 9Bh 133 22F1: PHOS_DAY_I equ 9Ch 134 22F1: PHOS_DAY_O equ 9Ch 135 22F1: PHOS_SPR_AUR_I equ 9Dh 136 22F1: PHOS_SPR_AUR_O equ 9Dh 137 22F1: PHOS_MAX_I equ 9Eh 138 22F1: PHOS_MAX_O equ 9Eh 139 22F1: PHOS_DAC_I equ 9Fh 140 22F1: SP1_DAY_I equ 0A0h 141 22F1: SP1_DAY_O equ 0A0h 142 22F1: SP1_SPR_I equ 0A1h 143 22F1: SP1_SPR_O equ 0A1h 144 22F1: SP1_AUR_I equ 0A2h 145 22F1: SP1_AUR_O equ 0A2h 146 22F1: SP1_DAC_I equ 0A3h 147 22F1: HV_UNLOCK_0_O equ 0A3h 148 22F1: SP2_DAY_I equ 0A4h 149 22F1: SP2_DAY_O equ 0A4h 150 22F1: SP2_SPR_I equ 0A5h Page 12 151 22F1: SP2_SPR_O equ 0A5h 152 22F1: SP2_AUR_I equ 0A6h 153 22F1: SP2_AUR_O equ 0A6h 154 22F1: SP2_DAC_I equ 0A7h 155 22F1: HV_UNLOCK_1_O equ 0A7h 156 22F1: SP3_DAY_I equ 0A8h 157 22F1: SP3_DAY_O equ 0A8h 158 22F1: SP3_SPR_I equ 0A9h 159 22F1: SP3_SPR_O equ 0A9h 160 22F1: SP3_AUR_I equ 0AAh 161 22F1: SP3_AUR_O equ 0AAh 162 22F1: SP3_DAC_I equ 0ABh 163 22F1: HV_UNLOCK_2_O equ 0ABh 164 22F1: SP4_DAY_I equ 0ACh 165 22F1: SP4_DAY_O equ 0ACh 166 22F1: SP4_SPR_I equ 0ADh 167 22F1: SP4_SPR_O equ 0ADh 168 22F1: SP4_AUR_I equ 0AEh 169 22F1: SP4_AUR_O equ 0AEh 170 22F1: SP4_DAC_I equ 0AFh 171 22F1: HV_UNLOCK_3_O equ 0AFh 172 22F1: SP5_DAY_I equ 0B0h 173 22F1: SP5_DAY_O equ 0B0h 174 22F1: SP5_SPR_I equ 0B1h 175 22F1: SP5_SPR_O equ 0B1h 176 22F1: SP5_AUR_I equ 0B2h 177 22F1: SP5_AUR_O equ 0B2h 178 22F1: SP5_DAC_I equ 0B3h 179 22F1: SP6_DAY_I equ 0B4h 180 22F1: SP6_DAY_O equ 0B4h 181 22F1: SP6_SPR_I equ 0B5h 182 22F1: SP6_SPR_O equ 0B5h 183 22F1: SP6_AUR_I equ 0B6h 184 22F1: SP6_AUR_O equ 0B6h 185 22F1: SP6_DAC_I equ 0B7h 186 22F1: ; (B8-BF unused) 187 22F1: 188 22F1: ; Ports C0-DFh are on DPU and not in Actels: 189 22F1: ; (0C0h-0DFh not used) 190 22F1: ; 191 22F1: ; Ports E0-FFh are on DPU Test Pod: 192 22F1: ; (0E0h-0E3h not used) 193 22F1: DTP_RX_I EQU 0E4h ; debug UART rx data 194 22F1: DTP_TX_O EQU 0E4h ; debug UART tx data 195 22F1: DTP_CTRL_O EQU 0E5h ; debug UART control 196 22F1: DTP_STS_I EQU 0E5h ; debug UART status 197 22F1: DTP_SENSE_I EQU 0E6H ; debug Sense PB and PROM status 198 22F1: DTP_SCOPE_TRG_O EQU 0E6H ; debug scope trigger 199 22F1: ; (0E7h-0EFh not used) 200 22F1: ; 201 22F1: DTP_LCD_CTL_O EQU 0F0H ; LCD control 202 22F1: DTP_LCD_DAT_O EQU 0F1H ; LCD write data 203 22F1: DTP_LCD_STS_I EQU 0F2h ; LCD status 204 22F1: DTP_LCD_DAT_I EQU 0F3h ; LCD read data 205 22F1: ; (0F4h-0FFh not used) 206 22F1: ; 207 22F1: ; 208 22F1: ; 209 22F1: ; Restart vector addresses 210 22F1: ; Page 13 211 22F1: RST_0 equ 00h 212 22F1: RST_1 equ 08h 213 22F1: RST_2 equ 10h 214 22F1: RST_3 equ 18h 215 22F1: RST_4 equ 20h 216 22F1: TRAP equ 24h 217 22F1: RST_5 equ 28h 218 22F1: RST_55 equ 2Ch 219 22F1: RST_6 equ 30h 220 22F1: RST_65 equ 34h 221 22F1: RST_7 equ 38h 222 22F1: RST_75 equ 3Ch 223 22F1: ; 224 22F1: JMP_OPCODE equ 0C3h 225 22F1: 97 22F1: 98 22F1: ; Mass Memory addresses are 32 bits 99 22F1: ; and represent 4-byte words 100 22F1: pvcf_MM_address ds 4 101 22F5: current_store_buffer equ GBL_CURRENT_SC_BUFFER 102 22F5: sc_MM_address ds 4 103 22F9: 104 22F9: ; size of PVCF = 1108 bytes, or 277 32-bit words (115 hex) 105 22F9: ; as a 4-byte number 106 22F9: 00 00 01 15 C1108 db 0,0,01h,15h 107 22FD: 108 22FD: sq01 ds 2 ; source sequence for MBR packet 109 22FF: 110 22FF: 111 22FF: SC_INIT: 112 22FF: ; Copy two tables into Global Memory. 113 22FF: ; This one (Base Parameter List - BPL) gives the 114 22FF: ; Mass Memory addresses of various DCM control words. 115 22FF: 21 22B9 lxi h,default_BPL 116 2302: 11 AE15 lxi d,GBL_BPL_STATUS 117 2305: 0E 18 mvi c,6*4 ; (6 to include RO_BASE) 118 2307: CD 0000p call copy_bytes 119 230A: ; This table defines the location and size 120 230A: ; of the spacecraft buffers. 121 230A: 21 22D1 lxi h,default_PP 122 230D: 11 AE2D lxi d,GBL_PP_OP 123 2310: 0E 20 mvi c,8*4 124 2312: CD 0000p call copy_bytes 125 2315: 126 2315: 21 0000 lxi h,0 127 2318: 22 22FD shld sq01 128 231B: 3E 00 mvi a,0 129 231D: 32 232A sta flush 130 2320: 131 2320: ; Start the task which manages sending a Spacecraft Buffer 132 2320: ; to the spacecraft. 133 2320: 11 2337 lxi d,sc_task 134 2323: 21 A257 lxi h,GBL_SC_STACK+stack_size 135 2326: CD 0000p call task_new 136 2329: C9 ret 137 232A: 138 232A: 139 232A: flush ds 1 140 232B: Page 14 141 232B: SC_FLUSH: 142 232B: ; force transmission of SC Buffers 143 232B: F5 push psw 144 232C: 3E 01 mvi a,1 145 232E: 32 232A sta flush 146 2331: F1 pop psw 147 2332: C9 ret 148 2333: 149 2333: ; ===Task to Send Science Telemetry to Spacecraft === 150 2333: count ds 2 ; little endian 151 2335: mbr_count ds 2 ; big endian 152 2337: 153 2337: ; ==== SC Task === 154 2337: sc_task: 155 2337: 156 2337: ; waiting for Buffer #1 to fill 157 2337: scw1: 158 2337: CD 0000p call task 159 233A: 160 233A: ; If flush requested, flush 1, then 2 161 233A: 3A 232A lda flush ; flush requested? 162 233D: FE 01 cpi 1 163 233F: C2 2350 jnz nof1 164 2342: 165 2342: ; flush both buffers 166 2342: CD 2392 call send1 167 2345: CD 23E7 call send2 168 2348: 3E 00 mvi a,0 169 234A: 32 232A sta flush ; reset flush flag 170 234D: C3 2337 jmp sc_task ; start over 171 2350: 172 2350: 3A 8062 nof1: lda GBL_SC_BUF1 173 2353: ; test for Buf1 ready-to-send 174 2353: FE 01 scw1a: cpi 1 175 2355: C2 2337 jnz scw1 ; not ready 176 2358: ; send buffer 1 177 2358: CD 2392 call send1 178 235B: 179 235B: ; Waiting for Buffer 2 to fill 180 235B: CD 0000p scw2: call task 181 235E: 182 235E: ; if MM upset, go back to waiting for buffer 1 183 235E: 3A B196 lda GBL_PVSTART 184 2361: FE 00 cpi 0 185 2363: CA 2337 jz scw1 ; 0 means upset 186 2366: 187 2366: ; If flush requested, flush 2, then 1 188 2366: 3A 232A lda flush 189 2369: FE 01 cpi 1 190 236B: C2 237C jnz nof2 191 236E: CD 23E7 call send2 192 2371: CD 2392 call send1 193 2374: 3E 00 mvi a,0 194 2376: 32 232A sta flush ; reset flush flag 195 2379: C3 2337 jmp sc_task ; start over 196 237C: 197 237C: 3A 8063 nof2: lda GBL_SC_BUF2 198 237F: ; send buffer 2 199 237F: FE 01 scw2a: cpi 1 200 2381: C2 235B jnz scw2 Page 15 201 2384: 3A B196 lda GBL_PVSTART 202 2387: FE 00 cpi 0 203 2389: CA 2337 jz scw1 204 238C: CD 23E7 call send2 205 238F: C3 2337 jmp sc_task 206 2392: 207 2392: ; Subroutine to send SC Buffer 1 208 2392: send1: 209 2392: ; get number of PVCFs to send 210 2392: 3A 818E lda GBL_SOH+71 211 2395: 32 2334 sta count+1 ; (store it little-endian) 212 2398: 4F mov c,a 213 2399: 32 2335 sta mbr_count ; (store it big-endian) 214 239C: 3A 818F lda GBL_SOH+72 215 239F: 32 2333 sta count 216 23A2: 32 2336 sta mbr_count+1 217 23A5: B1 ora c ; nonzero? 218 23A6: C8 rz ; zero; nothing to send 219 23A7: ; add to overall PVCF total (big endian, in SOH) 220 23A7: 2A 2333 lhld count 221 23AA: 3A 815A lda GBL_SOH+19 222 23AD: 57 mov d,a 223 23AE: 3A 815B lda GBL_SOH+20 224 23B1: 5F mov e,a 225 23B2: 19 dad d 226 23B3: 7C mov a,h 227 23B4: 32 815A sta GBL_SOH+19 228 23B7: 7D mov a,l 229 23B8: 32 815B sta GBL_SOH+20 230 23BB: ; Set starting MM address 231 23BB: 21 AE31 lxi h,GBL_PP_MMSC1 232 23BE: 11 22F5 lxi d,sc_MM_address 233 23C1: 0E 04 mvi c,4 234 23C3: CD 0000p call copy_bytes 235 23C6: ; Send the buffer to the spacecraft 236 23C6: CD 245D call send_buffer 237 23C9: b1mt: 238 23C9: ; Buffer 1 is now empty 239 23C9: 3E 00 mvi a,0 240 23CB: 32 8062 sta GBL_SC_BUF1 241 23CE: ; copy PVCF count for checker 242 23CE: 2A 818E lhld GBL_SOH+71 243 23D1: 22 B078 shld GBL_N1 244 23D4: ; zero the buffer counter shown in SOH 245 23D4: 21 0000 lxi h,0 246 23D7: 22 818E shld GBL_SOH+71 ; SC1_NPVCFS 247 23DA: ; zero the counter in MM 248 23DA: 21 AE0D lxi h,GBL_ZERO 249 23DD: 11 AE3D lxi d,GBL_PP_N_SC1 250 23E0: 01 0001 lxi b,1 251 23E3: CD 0000p call mm_store 252 23E6: C9 ret 253 23E7: 254 23E7: ; Subroutine to send SC buffer 2 255 23E7: send2: 256 23E7: ; get number of PVCVs to send 257 23E7: 3A 8190 lda GBL_SOH+73 258 23EA: 32 2334 sta count+1 ; (store it little-endian) 259 23ED: 4F mov c,a 260 23EE: 32 2335 sta mbr_count ; (store it big-endian) Page 16 261 23F1: 3A 8191 lda GBL_SOH+74 262 23F4: 32 2333 sta count 263 23F7: 32 2336 sta mbr_count+1 264 23FA: B1 ora c ; nonzero? 265 23FB: C8 rz ; zero; nothing to send 266 23FC: ; add to overall PVCF total (big endian, in SOH) 267 23FC: 2A 2333 lhld count 268 23FF: 3A 815A lda GBL_SOH+19 269 2402: 57 mov d,a 270 2403: 3A 815B lda GBL_SOH+20 271 2406: 5F mov e,a 272 2407: 19 dad d 273 2408: 7C mov a,h 274 2409: 32 815A sta GBL_SOH+19 275 240C: 7D mov a,l 276 240D: 32 815B sta GBL_SOH+20 277 2410: ; Set starting MM address 278 2410: 21 AE35 lxi h,GBL_PP_MMSC2 279 2413: 11 22F5 lxi d,sc_MM_address 280 2416: 0E 04 mvi c,4 281 2418: CD 0000p call copy_bytes 282 241B: ; Send the buffer to the spacecraft 283 241B: CD 245D call send_buffer 284 241E: ; Buffer 2 is now empty 285 241E: b2mt: 286 241E: 3E 00 mvi a,0 287 2420: 32 8063 sta GBL_SC_BUF2 288 2423: ; copy PVCF count for checker 289 2423: 2A 8190 lhld GBL_SOH+73 290 2426: 22 B07A shld GBL_N2 291 2429: ; zero the buffer's PVCF counter shown in SOH 292 2429: 21 0000 lxi h,0 293 242C: 22 8190 shld GBL_SOH+73 ; SC2_NPVCFS 294 242F: ; zero the counter in MM 295 242F: 21 AE0D lxi h,GBL_ZERO 296 2432: 11 AE41 lxi d,GBL_PP_N_SC2 297 2435: 01 0001 lxi b,1 298 2438: CD 0000p call mm_store 299 243B: C9 ret 300 243C: 301 243C: SC_SEND_MBR: 302 243C: ; Signal spacecraft that FSW wishes to transmit 303 243C: ; a block of PVCFs. 304 243C: ; HL - points to count word (number of PVCFs) 305 243C: F5 push psw 306 243D: D5 push d 307 243E: E5 push h 308 243F: 309 243F: E5 push h ; >>save pointer to count word 310 2440: 3E 00 mvi a,0 311 2442: 32 8064 sta GBL_MBR_REPLY ; reset MBR reply flag 312 2445: ; Send MBR message to Spacecraft 313 2445: 3E 01 mvi a,01h ; ApID 701 314 2447: 01 0014 lxi b,20 ; total packet length is 20 315 244A: 2A 22FD lhld sq01 ; this ApID's source sequence number 316 244D: EB xchg ; in DE 317 244E: E1 pop h ; <