Pre-launch Review
EXECUTIVE
Scanned pages: 1208-1220
# Copyright: Public domain.# Filename: EXECUTIVE.agc# Purpose: Part of the source code for Colossus 2A, AKA Comanche 055.# It is part of the source code for the Command Module's (CM)# Apollo Guidance Computer (AGC), for Apollo 11.# Assembler: yaYUL# Contact: Ron Burkey <info@sandroid.org>.# Website: www.ibiblio.org/apollo.# Pages: 1208-1220# Mod history: 2009-05-14 RSB Adapted from the Colossus249/ file of the# same name, using Comanche055 page images.## This source code has been transcribed or otherwise adapted from digitized# images of a hardcopy from the MIT Museum. The digitization was performed# by Paul Fjeld, and arranged for by Deborah Douglas of the Museum. Many# thanks to both. The images (with suitable reduction in storage size and# consequent reduction in image quality as well) are available online at# www.ibiblio.org/apollo. If for some reason you find that the images are# illegible, contact me at info@sandroid.org about getting access to the# (much) higher-quality images which Paul actually created.## Notations on the hardcopy document read, in part:## Assemble revision 055 of AGC program Comanche by NASA# 2021113-051. 10:28 APR. 1, 1969## This AGC program shall also be referred to as# Colossus 2A
# Page 1208 BLOCK 02
# TO ENTER A JOB REQUEST REQUIRING NO VAC AREA:
COUNT 02/EXEC
NOVAC INHINT AD FAKEPRET # LOC(MPAC +6) - LOC(QPRET) TS NEWPRIO # PRIORITY OF NEW JOB + NOVAC C(FIXLOC)
EXTEND INDEX Q # Q WILL BE UNDISTURBED THROUGHOUT. DCA 0 # 2CADR OF JOB ENTERED. DXCH NEWLOC CAF EXECBANK XCH FBANK TS EXECTEM1 TCF NOVAC2 # ENTER EXECUTIVE BANK.
# TO ENTER A JOB REQUEST REQUIRING A VAC AREA - E.G., ALL (PARTIALLY) INTERPRETIVE JOBS.
FINDVAC INHINT TS NEWPRIO EXTEND INDEX Q DCA 0SPVACIN DXCH NEWLOC CAF EXECBANK XCH FBANK TCF FINDVAC2 # OFF TO EXECUTIVE SWITCHED-BANK.
# TO ENTER A FINDVAC WITH THE PRIORITY IN NEWPRIO TO THE 2CADR ARRIVING IN A AND L:# USERS OF SPVAC MUST INHINT BEFORE STORING IN NEWPRIO.
SPVAC XCH Q AD NEG2 XCH Q TCF SPVACIN
# TO SUSPEND A BASIC JOB SO A HIGHER PRIORITY JOB MAY BE SERVICED:
CHANG1 LXCH Q CAF EXECBANK XCH BBANK TCF CHANJOB
# TO SUSPEND AN INTERPRETIVE JOB:
CHANG2 CS LOC # NEGATIVE LOC SHOWS JOB = INTERPRETIVE.# ITRACE (4) REFERS TO "CHANG2".# Page 1209 TS L +2 CAF EXECBANK TS BBANK TCF CHANJOB -1
# Page 1210# TO VOLUNTARILY SUSPEND A JOB UNTIL THE COMPLETION OF SOME ANTICIPATED EVENT (I/O EVENT ETC.):
JOBSLEEP TS LOC CAF EXECBANK TS FBANK TCF JOBSLP1
# TO AWAKEN A JOB PUT TO SLEEP IN THE ABOVE FASHION:
JOBWAKE INHINT TS NEWLOC CS TWO # EXIT IS VIA FINDVAC/NOVAC PROCEDURES. ADS Q CAF EXECBANK XCH FBANK TCF JOBWAKE2
# TO CHANGE THE PRIORITY OF A JOB CURRENTLY UNDER EXECUTION:
PRIOCHNG INHINT # NEW PRIORITY ARRIVES IN A. RETURNS TO TS NEWPRIO # CALLER AS SOON AS NEW JOB PRIORITY IS CAF EXECBANK # HIGHEST. PREPARE FOR POSSIBLE BASIC- XCH BBANK # STYLE CHANGE-JOB. TS BANKSET CA Q TCF PRIOCH2
# TO REMOVE A JOB FROM EXECUTIVE CONSIDERATIONS:
ENDOFJOB CAF EXECBANK TS FBANK TCF ENDJOB1
ENDFIND CA EXECTEM1 # RETURN TO CALLER AFTER JOB ENTRY TS FBANK # COMPLETE. TCF Q+2EXECBANK CADR FINDVAC2
FAKEPRET ADRES MPAC -36D # LOC(MPAC +6) - LOC(QPRET)
# Page 1211# LOCATE AN AVAILABLE VAC AREA.
BANK 01 COUNT 01/EXEC
FINDVAC2 TS EXECTEM1 # (SAVE CALLER'S BANK FIRST.) CCS VAC1USE TCF VACFOUND CCS VAC2USE TCF VACFOUND CCS VAC3USE TCF VACFOUND CCS VAC4USE TCF VACFOUND CCS VAC5USE TCF VACFOUND TC BAILOUT OCT 1201 # NO VAC AREAS.
VACFOUND AD TWO # RESERVE THIS VAC AREA BY STORING A ZERO ZL # IN ITS VAC USE REGISTER AND STORE THE INDEX A # ADDRESS OF THE FIRST WORD OF IT IN THE LXCH 0 -1 # LOW NINE BITS OF THE PRIORITY WORD. ADS NEWPRIO
NOVAC2 CAF ZERO # NOVAC ENTERS HERE. FIND A CORE SET. TS LOCCTR CAF NO.CORES # SEVEN SETS OF ELEVEN REGISTERS EACH.NOVAC3 TS EXECTEM2 INDEX LOCCTR CCS PRIORITY # EACH PRIORITY REGISTER CONTAINS -0 IF TCF NEXTCORE # THE CORRESPONDING CORE SET IS AVAILABLE.NO.CORES DEC 6 TCF NEXTCORE # AN ACTIVE JOB HAS A POSITIVE PRIORITY # BUT A DORMANT JOB'S PRIORITY IS NEGATIVE
# Page 1212CORFOUND CA NEWPRIO # SET THE PRIORITY OF THIS JOB IN THE CORE INDEX LOCCTR # SET'S PRIORITY REGISTER AND SET THE TS PRIORITY # JOB'S PUSH-DOWN POINTER AT THE BEGINNING MASK LOW9 # OF THE WORK AREA AND OVERFLOW INDICATOR INDEX LOCCTR TS PUSHLOC # OFF TO PREPARE FOR INTERPRETIVE PROGRAMS
CCS LOCCTR # IF CORE SET ZERO IS BEING LOADED, SET UP TCF SETLOC # OVFIND AND FIXLOC IMMEDIATELY. TS OVFIND CA PUSHLOC TS FIXLOC
SPECTEST CCS NEWJOB # SEE IF ANY ACTIVE JOBS WAITING (RARE). TCF SETLOC # MUST BE AWAKENED BUT UNCHANGED JOB. TC CCSHOLE TC CCSHOLE TS NEWJOB # +0 SHOWS ACTIVE JOB ALREADY SET. DXCH NEWLOC DXCH LOC TCF ENDFIND
SETLOC DXCH NEWLOC # SET UP THE LOCATION REGISTERS FOR THIS INDEX LOCCTR DXCH LOC INDEX NEWJOB # THIS INDEX INSTRUCTION INSURES THAT THE CS PRIORITY # HIGHEST ACTIVE PRIORITY WILL BE COMPARED AD NEWPRIO # WITH THE NEW PRIORITY TO SEE IF NEWJOB EXTEND # SHOULD BE SET TO SIGNAL A SWITCH. BZMF ENDFIND CA LOCCTR # LOCCTR IS LEFT SET AT THIS CORE SET IF TS NEWJOB # THE CALLER WANTS TO LOAD ANY MPAC TCF ENDFIND # REGISTERS, ETC.
NEXTCORE CAF COREINC ADS LOCCTR CCS EXECTEM2 TCF NOVAC3 TC BAILOUT # NO CORE SETS. OCT 1202# Page 1213# THE FOLLOWING ROUTINE SWAPS CORE SET 0 WITH THAT WHOSE RELATIVE ADDRESS IS IN NEWJOB.
-2 LXCH LOC -1 CAE BANKSET # BANKSET, NOT BBANK, HAS RIGHT CONTENTS.CHANJOB INHINT EXTEND ROR SUPERBNK # PICK UP CURRENT SBANK FOR BBCON XCH L # LOC IN A AND BBCON IN L. +4 INDEX NEWJOB # SWAP LOC AND BANKSET. DXCH LOC DXCH LOC
CAE BANKSET EXTEND WRITE SUPERBNK # SET SBANK FOR NEW JOB. DXCH MPAC # SWAP MULTI-PURPOSE ACCUMULATOR AREAS. INDEX NEWJOB DXCH MPAC DXCH MPAC DXCH MPAC +2 INDEX NEWJOB DXCH MPAC +2 DXCH MPAC +2 DXCH MPAC +4 INDEX NEWJOB DXCH MPAC +4 DXCH MPAC +4 DXCH MPAC +6 INDEX NEWJOB DXCH MPAC +6 DXCH MPAC +6
CAF ZERO XCH OVFIND # MAKE PUSHLOC NEGATIVE IF OVFIND NZ. EXTEND BZF +3 CS PUSHLOC TS PUSHLOC
DXCH PUSHLOC INDEX NEWJOB DXCH PUSHLOC DXCH PUSHLOC # SWAPS PUSHLOC AND PRIORITY. CAF LOW9 # SET FIXLOC TO BASE OF VAC AREA. MASK PRIORITY TS FIXLOC
CCS PUSHLOC # SET OVERFLOW INDICATOR ACCORDING TO CAF ZERO TCF ENDPRCHG -1
# Page 1214 CS PUSHLOC TS PUSHLOC CAF ONE XCH OVFIND TS NEWJOB
ENDPRCHG RELINT DXCH LOC # BASIC JOBS HAVE POSITIVE ADDRESSES, SO EXTEND # DISPATCH WITH A DTCB. BZMF +2 # IF INTERPRETIVE, SET UP EBANK, ETC. DTCB# Page 1215 COM # EPILOGUE TO JOB CHANGE FOR INTERPRETIVE AD ONE TS LOC # RESUME. TCF INTRSM
# COMPLETE JOBSLEEP PREPARATIONS.
JOBSLP1 INHINT CS PRIORITY # NNZ PRIORITY SHOWS JOB ASLEEP. TS PRIORITY CAF LOW7 MASK BBANK EXTEND ROR SUPERBNK # SAVE OLD SUPERBANK VALUE. TS BANKSET CS ZEROJOBSLP2 TS BUF +1 # HOLDS - HIGHEST PRIORITY. TCF EJSCAN # SCAN FOR HIGHEST PRIORITY ALA ENDOFJOB.
NUCHANG2 INHINT # QUICK... DONT LET NEWJOB CHANGE TO +0 . CCS NEWJOB TCF +3 # NEWJOB STILL PNZ RELINT # NEWJOB HAS CHANGED TO +0. WAKE UP JOB TCF ADVAN +2 # VIA NUDIRECT. (VERY RARE CASE.)
CAF TWO EXTEND WOR DSALMOUT # TURN ON ACTIVITY LIGHT DXCH LOC # AND SAVE ADDRESS INFO FOR BENEFIT OF TCF CHANJOB + 4 # POSSIBLE SLEEPING JOB.
# Page 1216# TO WAKE UP A JOB, EACH CORE SET IS FOUND TO LOCATE ALL JOBS WHICH ARE ASLEEP. IF THE FCADR IN THE# LOC REGISTER OF ANY SUCH JOB MATCHES THAT SUPPLIED BY THE CALLER, THAT JOB IS AWAKENED. IF NO JOB IS FOUND,# LOCCTR IS SET TO -1 AND NO FURTHER ACTION TAKES PLACE.
JOBWAKE2 TS EXECTEM1 CAF ZERO # BEGIN CORE SET SCAN. TS LOCCTR CAF NO.CORESJOBWAKE4 TS EXECTEM2 INDEX LOCCTR CCS PRIORITY TCF JOBWAKE3 # ACTIVE JOB - CHECK NEXT CORE SET.COREINC DEC 12 # 12 REGISTERS PER CORE SET. TCF WAKETEST # SLEEPING JOB - SEE IF CADR MATCHES.
JOBWAKE3 CAF COREINC ADS LOCCTR CCS EXECTEM2 TCF JOBWAKE4 CS ONE # EXIT IF SLEEPING JOB NOT FOUND. TS LOCCTR TCF ENDFIND
WAKETEST CS NEWLOC INDEX LOCCTR AD LOC EXTEND BZF +2 # IF MATCH. TCF JOBWAKE3 # EXAMINE NEXT CORE SET IF NO MATCH.
INDEX LOCCTR # RE-COMPLEMENT PRIORITY TO SHOW JOB AWAKE CS PRIORITY TS NEWPRIO INDEX LOCCTR TS PRIORITY
CS FBANKMSK # MAKE UP THE 2CADR OF THE WAKE ADDRESS MASK NEWLOC # USING THE CADR IN NEWLOC AND THE EBANK AD 2K # HALF OF BBANK SAVED IN BANKSET. XCH NEWLOC MASK FBANKMSK INDEX LOCCTR AD BANKSET TS NEWLOC +1
CCS LOCCTR # SPECIAL TREATMENT IF THIS JOB WAS TCF SETLOC # ALREADY IN THE RUN (0) POSITION. TCF SPECTEST
# Page 1217# PRIORITY CHANGE. CHANGE THE CONTENTS OF PRIORITY AND SCAN FOR THE JOB OF HIGHEST PRIORITY.
PRIOCH2 TS LOC CAF ZERO # SET FLAG TO TELL ENDJOB SCANNER IF THIS TS BUF # JOB IS STILL HIGHEST PRIORITY. CAF LOW9 MASK PRIORITY AD NEWPRIO TS PRIORITY COM TCF JOBSLP2 # AND TO EJSCAN.
# Page 1218# RELEASE THIS CORE SET AND VAC AREA AND SCAN FOR THE JOB OF HIGHEST ACTIVE PRIORITY.
ENDJOB1 INHINT CS ZERO TS BUF +1 XCH PRIORITY MASK LOW9 TS L
CS FAKEPRET AD L
EXTEND BZMF EJSCAN # NOVAC ENDOFJOB
CCS L INDEX A TS 0
EJSCAN CCS PRIORITY +12D TC EJ1 TC CCSHOLE TCF +1
CCS PRIORITY +24D # EXAMINE EACH PRIORITY REGISTER TO FIND TC EJ1 # THE JOB OF HIGHEST ACTIVE PRIORITY. TC CCSHOLE TCF +1
CCS PRIORITY +36D TC EJ1-CCSPR -CCS PRIORITY TCF +1
CCS PRIORITY +48D TC EJ1 TC CCSHOLE TCF +1
CCS PRIORITY +60D TC EJ1 TC CCSHOLE TCF +1
CCS PRIORITY +72D TC EJ1 TC CCSHOLE TCF +1
# Page 1219# EVALUATE THE RESULTS OF THE SCAN.
CCS BUF +1 # SEE IF THERE ARE ANY ACTIVE JOBS WAITING TC CCSHOLE TC CCSHOLE
TCF +2 TCF DUMMYJOB CCS BUF # BUF IS ZERO IF THIS IS A PRIOCHNG AND TCF +2 # CHANGED PRIORITY IS STILL HIGHEST. TCF ENDPRCHG -1
INDEX A # OTHERWISE, SET NEWJOB TO THE RELATIVE CAF 0 -1 # ADDRESS OF THE NEW JOB'S CORE SET. AD -CCSPR TS NEWJOB TCF CHANJOB -2
EJ1 TS BUF +2 AD BUF +1 # - OLD HIGH PRIORITY. CCS A CS BUF +2 TCF EJ2 # NEW HIGH PRIORITY. NOOP INDEX Q TC 2 # PROCEED WITH SEARCH.
EJ2 TS BUF +1 EXTEND QXCH BUF # FOR LOCATING CCS PRIORITY + X INSTR. INDEX BUF TC 2
# Page 1220# IDLING AND COMPUTER ACTIVITY (GREEN) LIGHT MAINTENANCE. THE IDLING ROUTINE IS NOT A JOB IN ITSELF,# BUT RATHER A SUBROUTINE OF THE EXECUTIVE.
EBANK= SELFRET # SELF-CHECK STORAGE IN EBANK.
DUMMYJOB CS ZERO # SET NEWJOB TO -0 FOR IDLING. TS NEWJOB RELINT CS TWO # TURN OFF THE ACTIVITY LIGHT. EXTEND WAND DSALMOUTADVAN CCS NEWJOB # IS A NEWJOB ACTIVE ? TCF NUCHANG2 # YES... ONE REQUIRING A CHANGE JOB. CAF TWO # NEW JOB ALREADY IN POSITION FOR TCF NUDIRECT # EXECUTION.
CA SELFRET TS L # PUT RETURN ADDRESS IN L. CAF SELFBANK TCF SUPDXCHZ + 1 # AND DISPATCH JOB.
EBANK= SELFRETSELFBANK BBCON SELFCHK
NUDIRECT EXTEND # TURN THE GREEN LIGHT BACK ON. WOR DSALMOUT DXCH LOC # JOBS STARTED IN THIS FASHION MUST BE TCF SUPDXCHZ
BLOCK 2 # IN FIXED-FIXED SO OTHERS MAY USE.
COUNT 02/EXEC
# SUPDXCHZ - ROUTINE TO TRANSFER TO SUPERBANK.# CALLING SEQUENCE# TCF SUPDXCHZ # WITH 2CADR OF DESIRED LOCATION IN A + L.
SUPDXCHZ XCH L # BASIC.+1 EXTEND WRITE SUPERBNK TS BBANK TC L
NEG100 OCT 77677