Source Code
These source-code files are part of a reconstructed copy of Skylark 048, the
Block II Command Module (CM) Apollo Guidance Computer (AGC) software for the
Skylab-2, Skylab-3, Skylab-4, and Apollo-Soyuz Test Project missions.
They have been created via disassembly of binary dumps of the original core rope memory modules actually flown on Skylab-2, part numbers 2010802-541, 2010802-551, 2010802-561, 2010802-571, 2010802-581, and 2010802-591. Access to these modules was provided by the New Mexico Museum of Space History, who we are much indebted to. The source code for the Apollo 15, 16, and 17 software, Artemis 072, was used as a starting point. Heavy use was made of TRW 4900.5-244, Programmed Guidance Equations for Skylark Command Module Earth Orbital Program, dated 14 February 1972. This document contains pseudocode of essentially all of Skylark, using original program labels which have been copied for this source reconstruction. Since only binary dumps (rather than listings) of Skylark are available as source material, all comments and labels are approximate. They have been taken from the Programmed Guidance Equations or other AGC programs where possible, or, in some places, written from scratch to match what we believe would have been in the original listing. |
009936,000002: ## Copyright: Public domain.
009937,000003: ## Filename: SXTMARK.agc
009938,000004: ## Purpose: A section of Skylark revision 048.
009939,000005: ## It is part of the source code for the Apollo Guidance Computer (AGC)
009940,000006: ## for Skylab-2, Skylab-3, Skylab-4, and ASTP. No original listings of
009941,000007: ## this software are available; instead, this file was created via
009942,000008: ## disassembly of dumps of the core rope modules actually flown on
009943,000009: ## Skylab-2. Access to these modules was provided by the New Mexico
009944,000010: ## Museum of Space History.
009945,000011: ## Assembler: yaYUL
009946,000012: ## Contact: Ron Burkey <info@sandroid.org>.
009947,000013: ## Website: www.ibiblio.org/apollo/index.html
009948,000014: ## Mod history: 2023-09-04 MAS Created from Artemis 072.
009949,000015: ## 2024-03-05 MAS Updated for Skylark 48.
009950,000016:
009951,000017:
009952,000018: # PROGRAM NAME - SXTMARK
009953,000019:
009954,000020: # MOD. 1 8 AUG. 69 BY P.RYE
009955,000021:
009956,000022: # FUNCTIONAL DESCRIPTION
009957,000023:
009958,000024: # SXTMARK IS CALLED BY P03 AND BY P22, P23, P51, AND P52 VIA R53.
009959,000025: # THE REGISTER MARKINDX IS SET TO 5 IF THE CALLING PROGRAM IS P22, OR TO 1 FOR OTHER USERS.
009960,000026: # THIS REGISTER INDICATES THE NUMBER OF MARKS DESIRED.
009961,000027: # THE REGISTER EXTVBACT IS CHECKED (SUBROUTINE TESTMARK) TO INSURE THAT THE MARK DISPLAY SYSTEM
009962,000028: # IS FREE. IF NOT, BAILOUT (31211) IS DONE.
009963,000029: # BIT 2 OF THE REGISTER EXTVBACT IS SET BY SXTMARK, RESERVING THE MARKING AND EXTENDED VERB SYSTEM.
009964,000030: # SXTMARK DISPLAYS A FLASHING VERB 51, CALLING FOR MARKS. A PROCEED RESPONSE TO THIS DISPLAY
009965,000031: # WILL RELEASE THE MARKING SYSTEM (SUBROUTINES MKRELEAS, CLEARMARK) AND RETURN TO THE
009966,000032: # CALLING PROGRAM.
009967,000033:
009968,000034: # WHEN SUFFICIENT MARKS HAVE BEEN MADE (MARKINDX = 0) A FLASHING V50N25, R1 = 16, IS DISPLAYED.
009969,000035: # A PROCEED RESPONSE TO THIS DISPLAY WILL RETURN TO THE CALLING PROGRAM AFTER RELEASING THE
009970,000036: # MARKING SYSTEM.
009971,000037:
009972,000038: # MARKS ARE PROCESSED BY THE ROUTINE MARKRUPT AS FOLLOWS:
009973,000039: # IF NO MARKS ARE CALLED FOR, ALARM CODE 114 IS SENT AND THE MARKRUPT ROUTINE EXITS.
009974,000040: # IF A MARK IS ACCEPTED, MARKFLG IS SET TO ENABLE A REJECT.
009975,000041: # IF R21(P20) IS RUNNING, DATA IS MOVED FROM STORAGE MRKBUF1 INTO MRKBUF2. NEW MARK DATA
009976,000042: # IS STORED INTO MRKBUF1.
009977,000043: # IF P22 IS RUNNING, MARK DATA IS STORED INTO SVMRKDAT, USING THE REGISTER P22DEX AS AN
009978,000044: # INDEX AND THE REGISTER 8NN AS A COUNTER. MARKINDX IS DECREMENTED.
009979,000045: # IF R57 IS RUNNING, MARK DATA IS STORED INTO MARKDOWN FOR DOWNLINK, THEN PROCESSED AS FOR
009980,000046: # R21. MARKRUPT THEN CALLS MARKDISP (IN R57).
009981,000047: # FOR OTHER USERS, MARK DATA IS STORED INTO MRKBUF1 AND MARKINDX IS DECREMENTED.
009982,000048:
009983,000049: # MARK REJECTS ARE PROCESSED BY THE ROUTINE MARKRUPT AS FOLLOWS:
009984,000050: # IF MARKFLG IS CLEAR (I.E., NO MARK WAS TAKEN), ALARM CODE 110 IS SENT AND THE ROUTINE EXITS.
009985,000051: # OTHERWISE, MARKINDX IS INCREMENTED, THE P22 INDICATORS 8NN AND P22DEX ARE DECREMENTED
009986,000052: # (IF THE USER IS P22), AND THE V51FL DISPLAY IN SXTMARK IS REESTABLISHED.
009987,000053:
009988,000054: # IF THE ERASABLE REGISTER CDUCHKWD IS SET TO A NON-ZERO VALUE, VALIDITY OF THE MARKS IS CHECKED
009989,000055: # BY THE MARKRUPT ROUTINE AS FOLLOWS:
009990,000056: # IF THE CDU'S CHANGE BY MORE THAN 3 BITS OVER THE TIME PERIOD INDICATED BY THE VALUE OF
009991,000057: # CDUCHKWD, ALARM CODE 121 IS SENT AND THE ROUTINE EXITS.
009992,000058:
009993,000059: # CALLING SEQUENCE -
009994,000060:
009995,000061: # TC BANKCALL
009996,000062: # CADR SXTMARK
009997,000063:
009998,000064:
009999,000065:
010000,000066: # NORMAL EXIT MODE -
010001,000067:
010002,000068: # RETURN TO USER VIA BANKJUMP (RETURN ADDRESS IN OPTCADR).
010003,000069:
010004,000070:
010005,000071: # ALARM OR ABORT EXIT MODES
010006,000072:
010007,000073: # 1. ALARM 110 - MARK REJECT WITH NO MARK
010008,000074: # 2. ALARM 113 - NO INBITS
010009,000075: # 3. ALARM 121 - CDU'S NO GOOD AT MARK TIME
010010,000076: # 4. ALARM 114 - MARK MADE BUT NOT DESIRED
010011,000077: # 5. BAILOUT 31211 - MARK DISPLAY SYSTEM BUSY
010012,000078:
010013,000079:
010014,000080: # ERASABLE INITIALIZATION REQUIRED -
010015,000081:
010016,000082: # NONE
010017,000083:
010018,000084:
010019,000085: # OUTPUT -
010020,000086:
010021,000087: # FOR P22:
010022,000088: # MARK DATA IN SVMRKDAT
010023,000089: # MARKINDX DECREMENTED BY ONE FOR EACH MARK TAKEN
010024,000090: # NO. OF MARKS IN 8NN
010025,000091: # FOR R57:
010026,000092: # MARK DATA IN MARKDOWN AND MRKBUF1
010027,000093: # FOR OTHER USERS:
010028,000094: # MARKINDX DECREMENTED TO ZERO IF A MARK WAS TAKEN
010029,000095: # MARK DATA IN MRKBUF1
010030,000096:
010031,000097:
010032,000098: # CONDITIONS AT EXIT -
010033,000099:
010034,000100: # MARKINDX = INITIAL VALUE - NO. MARKS TAKEN
010035,000101: # MARKING SYSTEM IS RELEASED :
010036,000102: # EXTVBACT = 0
010037,000103: # BIT 9 OPTMODES = 0
010038,000104: # OPTIND = -1
010039,000105: # BIT 2 CHAN12 = 0
010040,000106: # MARKFLG = 0
010041,000107: # OPTCADR CONTAINS CADR OF SXTMARK CALLER
010042,000108:
010043,000109:
010044,000110: 07,2000 SETLOC SXTMARKE
010045,000111: 07,2000 BANK
010046,000112:
010047,000113: 07,2000 E7,1702 EBANK= MRKBUF1
010048,000114: 07,2000 COUNT* $$/SXTMK
010049,000115: 07,2000 02046 SXTMARK TC TESTMARK
010050,000116: 07,2001 35001 SETMRK CAF ONE # INITIALIZE MARK COUNTER
010051,000117: 07,2002 54301 TS MARKINDX
010052,000118:
010053,000119: 07,2003 04676 TC MAKECADR # STORE RETURN TO USER WHO CALLED
010054,000120: 07,2004 55326 TS OPTCADR # SXTMARK IN OPTCADR
010055,000121:
010056,000122: 07,2005 04647 MKVB51 TC BANKCALL # CLEAR DISPLAY FOR MARK VERB
010057,000123: 07,2006 20455 CADR KLEENEX
010058,000124: 07,2007 32045 MKVBDSP CAF VB51 # DISPLAY MARK VERB 51
010059,000125: 07,2010 04647 +1 TC BANKCALL
010060,000126: 07,2011 20464 CADR GOMARK4
010061,000127: 07,2012 12015 TCF TERMSXT # VB34-TERMINATE
010062,000128: 07,2013 12026 TCF ENTANSWR # V33-PROCEED-MARKING DONE
010063,000129: 07,2014 12036 TCF MKVB5X # ENTER-RECYCLE TO INITIAL MARK DISPLAY
010064,000130:
010065,000131: 07,2015 05542 TERMSXT TC CLEARMRK # CLEAR MARK ACTIVITY.
010066,000132:
010067,000133: 07,2016 02057 TC MKRLEES
010068,000134:
010069,000135: 07,2017 05367 TC CHECKMM
010070,000136: 07,2020 00003 MM 03 B-14
010071,000137: 07,2021 12023 TCF +2
010072,000138: 07,2022 02024 TC TERMP03
010073,000139: 07,2023 04103 TC GOTOPOOH
010074,000140:
010075,000141: 07,2024 04666 TERMP03 TC POSTJUMP
010076,000142: 07,2025 67407 CADR GCOMP5
010077,000143:
010078,000144: 07,2026 37645 ENTANSWR CAF PRIO24
010079,000145: 07,2027 05134 TC NOVAC
010080,000146: 07,2030 0003777 EBANK= WHOCARES
010081,000147: 07,2030 05537 04067 2CADR ENDEXT
010082,000148:
010083,000149: 07,2032 35064 CAF PRIO13 # ALLOW LEFTOVER SLEEPING JOB IF ANY
010084,000150: 07,2033 05211 TC PRIOCHNG
010085,000151:
010086,000152: 07,2034 31326 MKVRET CA OPTCADR # OPTCADR HAS RETURN CADR OF USER WHO
010087,000153: 07,2035 04671 TC BANKJUMP # CALLED SXTMARK
010088,000154:
010089,000155: 07,2036 10301 MKVB5X CCS MARKINDX # REDISPLAY VB51 IF MORE MARKS WANTED
010090,000156: 07,2037 12005 TCF MKVB51
010091,000157: 07,2040 34321 MKVB50 CAF R1D1 # OCT 16
010092,000158: 07,2041 55240 TS DSPTEM1
010093,000159: 07,2042 32044 CAF V50N25 # DISPLAY V50N25 IF MARKING DONE.
010094,000160: 07,2043 12010 TCF MKVBDSP +1
010095,000161: 07,2044 14431 V50N25 VN 5025
010096,000162: 07,2045 14600 VB51 VN 5100
010097,000163:
010098,000164: 07,2046 36211 TESTMARK CAF SIX
010099,000165: 07,2047 71237 MASK EXTVBACT
010100,000166: 07,2050 10000 CCS A
010101,000167: 07,2051 12055 TCF MKABORT
010102,000168: 07,2052 35000 CAF BIT2
010103,000169: 07,2053 27237 ADS EXTVBACT
010104,000170: 07,2054 00002 TC Q
010105,000171:
010106,000172: 07,2055 07750 MKABORT TC BAILOUT
010107,000173: 07,2056 31211 OCT 31211
010108,000174:
010109,000175: 07,2057 07,2057 MKRELEAS EQUALS MKRLEES
010110,000176:
010111,000177: 07,2057 00004 MKRLEES INHINT
010112,000178: 07,2060 37702 CA NEGONE
010113,000179: 07,2061 55313 TS OPTIND # KILL COARS OPTICS
010114,000180:
010115,000181: 07,2062 35003 CAF ZERO
010116,000182: 07,2063 54301 TS MARKINDX
010117,000183:
010118,000184: 07,2064 44776 CS MARKBIT
010119,000185: 07,2065 70075 MASK FLAGWRD1
010120,000186: 07,2066 54075 TS FLAGWRD1
010121,000187:
010122,000188: 07,2067 00003 RELINT
010123,000189:
010124,000190: 07,2070 00002 TC Q
010125,000191:
010126,000192:
010127,000193: 07,2071 54016 MARKRUPT TS BANKRUPT # STORE CDUS AND OPTICS NOW
010128,000194: 07,2072 30035 CA CDUT
010129,000195: 07,2073 54361 TS MKCDUT
010130,000196: 07,2074 30036 CA CDUS
010131,000197: 07,2075 54357 TS MKCDUS
010132,000198: 07,2076 30033 CA CDUY
010133,000199: 07,2077 54356 TS MKCDUY
010134,000200: 07,2100 30034 CA CDUZ
010135,000201: 07,2101 54360 TS MKCDUZ
010136,000202: 07,2102 30032 CA CDUX
010137,000203: 07,2103 54362 TS MKCDUX
010138,000204: 07,2104 00006 EXTEND
010139,000205: 07,2105 30025 DCA TIME2 # GET TIME
010140,000206: 07,2106 52355 DXCH MKT2T1
010141,000207: 07,2107 00006 EXTEND
010142,000208: 07,2110 30355 DCA MKT2T1
010143,000209: 07,2111 52014 DXCH SAMPTIME # RUPT TIME FOR NOUN 65.
010144,000210:
010145,000211: 07,2112 56002 XCH Q
010146,000212: 07,2113 54012 TS QRUPT
010147,000213:
010148,000214: 07,2114 34774 CAF BIT6 # SEE IF MARK OR MKREJECT
010149,000215: 07,2115 00006 EXTEND
010150,000216: 07,2116 02016 RAND NAVKEYIN
010151,000217: 07,2117 10000 CCS A
010152,000218: 07,2120 02140 TC MARKIT # ITS A MARK
010153,000219:
010154,000220: 07,2121 34773 CAF BIT7 # NOT A MARK, SEE IF MKREJECT
010155,000221: 07,2122 00006 EXTEND
010156,000222: 07,2123 02016 RAND NAVKEYIN
010157,000223: 07,2124 10000 CCS A
010158,000224: 07,2125 02240 TC MKREJECT # ITS A MARK REJECT
010159,000225:
010160,000226: 07,2126 34342 KEYCALL CAF OCT37 # NOT MARK OR MKREJECT, SEE IF KEYCODE
010161,000227: 07,2127 00006 EXTEND
010162,000228: 07,2130 02016 RAND NAVKEYIN
010163,000229: 07,2131 00006 EXTEND
010164,000230: 07,2132 12135 BZF +3 # IF NO INBITS
010165,000231: 07,2133 04666 TC POSTJUMP
010166,000232: 07,2134 17626 CADR KEYCOM # IT,S A KEY CODE, NOT A MARK.
010167,000233:
010168,000234: 07,2135 05644 +3 TC ALARM # ALARM IF NO INBITS
010169,000235: 07,2136 00113 OCT 113
010170,000236: 07,2137 05336 TC RESUME
010171,000237:
010172,000238:
010173,000239: # PROGRAM NAME - MARKIT DATE- 19 SEPT 1967
010174,000240:
010175,000241: # CALLING SEQUENCE
010176,000242: # FROM MARKRUPT IF CHAN 16 BIT 6 = 1
010177,000243:
010178,000244: # EXIT
010179,000245: # RESUME
010180,000246:
010181,000247: # INPUT
010182,000248: # CDUCHKWD. ALSO ALL INITIALIZATION FOR MARKCONT
010183,000249:
010184,000250: # OUTPUT
010185,000251: # MKT2T1,MKCDUX,MKCDUY,MKCDUZ,MKCDUS,MKCDUT
010186,000252:
010187,000253: # ALARM EXIT
010188,000254: # NONE
010189,000255:
010190,000256: 07,2140 11356 MARKIT CCS CDUCHKWD
010191,000257: 07,2141 12144 TCF +3 # DELAY OF CDUCHKWD CS IF PNZ
010192,000258: 07,2142 12144 TCF +2
010193,000259: 07,2143 35003 CAF ZERO
010194,000260: 07,2144 65001 AD ONE # 10 MS IF NO CHECK
010195,000261: 07,2145 05246 TC WAITLIST
010196,000262: 07,2146 E7,1702 EBANK= MRKBUF1
010197,000263: 07,2146 02151 16067 2CADR MARKDIF
010198,000264:
010199,000265: 07,2150 15336 TCF RESUME
010200,000266:
010201,000267: 07,2151 31356 MARKDIF CA CDUCHKWD # IF DELAY CHECK IS ZERO OR NEG, ACP MARK
010202,000268: 07,2152 00006 EXTEND
010203,000269: 07,2153 62164 BZMF MARKCONT
010204,000270: 07,2154 45001 CS BIT1
010205,000271: 07,2155 54353 TS MKNDX # SET INDEX -1
010206,000272: 07,2156 30362 CA MKCDUX
010207,000273: 07,2157 02221 TC DIFCHK # SEE IF VEHICLE RATE TO MUCH AT MARK
010208,000274: 07,2160 30356 CA MKCDUY
010209,000275: 07,2161 02221 TC DIFCHK
010210,000276: 07,2162 30360 CA MKCDUZ
010211,000277: 07,2163 02221 TC DIFCHK
010212,000278:
010213,000279: 07,2164 34764 MARKCONT CAF R21BIT # R21 MARKING
010214,000280: 07,2165 70076 MASK FLAGWRD2
010215,000281: 07,2166 10000 CCS A
010216,000282: 07,2167 12210 TCF PUTMARK # YES
010217,000283:
010218,000284: 07,2170 10301 CCS MARKINDX # MARKS CALLED FOR
010219,000285: 07,2171 12175 TCF MARK2 # YES
010220,000286:
010221,000287: 07,2172 05644 114ALM TC ALARM
010222,000288: 07,2173 00114 OCT 114 # MARKS NOT CALLED FOR
010223,000289: 07,2174 05327 TC TASKOVER
010224,000290:
010225,000291: 07,2175 54301 MARK2 TS MARKINDX # DECREMENT NO. MARKS WANTED
010226,000292:
010227,000293: 07,2176 07710 TC UPFLAG
010228,000294: 07,2177 00032 ADRES MARKFLG # SET FLAG TO ENABLE REJECT
010229,000295:
010230,000296: 07,2200 12210 TCF PUTMARK
010231,000297:
010232,000298: 07,2201 10301 MARKDONE CCS MARKINDX # ANY MORE MARKS TO BE TAKEN
010233,000299: 07,2202 15327 TCF TASKOVER
010234,000300: 07,2203 37644 CAF PRIO22
010235,000301: 07,2204 05150 TC FINDVAC
010236,000302: 07,2205 E7,1702 EBANK= MRKBUF1
010237,000303: 07,2205 02036 16067 2CADR MKVB5X
010238,000304:
010239,000305: 07,2207 15327 TCF TASKOVER
010240,000306:
010241,000307: 07,2210 36211 PUTMARK CAF SIX
010242,000308: 07,2211 05562 TC GENTRAN
010243,000309: 07,2212 00354 ADRES MKT2T1
010244,000310: 07,2213 01702 ADRES MRKBUF1
010245,000311:
010246,000312: 07,2214 34764 CAF R21BIT # DONT CALL VB50 DISPLAY FOR R21
010247,000313: 07,2215 70076 MASK FLAGWRD2
010248,000314: 07,2216 10000 CCS A
010249,000315: 07,2217 15327 TCF TASKOVER
010250,000316:
010251,000317: 07,2220 12201 TCF MARKDONE
010252,000318:
010253,000319: 07,2221 24353 DIFCHK INCR MKNDX # INCREMENT INDEX
010254,000320:
010255,000321: 07,2222 00006 EXTEND
010256,000322: 07,2223 50353 INDEX MKNDX
010257,000323: 07,2224 20032 MSU CDUX # GET MARK(ICDU) - CURRENT(ICDU)
010258,000324: 07,2225 10000 CCS A
010259,000325: 07,2226 12232 TCF +4
010260,000326: 07,2227 00002 TC Q
010261,000327: 07,2230 12232 TCF +2
010262,000328: 07,2231 00002 TC Q
010263,000329: 07,2232 67701 AD NEG2 # SEE IF DIFFERENCE GREATER THAN 3 BITS
010264,000330: 07,2233 00006 EXTEND
010265,000331: 07,2234 62231 BZMF -3 # NOT GREATER
010266,000332:
010267,000333: 07,2235 05644 TC ALARM # COUPLED WITH PROGRAM ALARM
010268,000334: 07,2236 00121 OCT 00121
010269,000335:
010270,000336: 07,2237 15327 TCF TASKOVER # DO NOT ACCEPT
010271,000337:
010272,000338: 07,2240 34764 MKREJECT CAF R21BIT
010273,000339: 07,2241 70076 MASK FLAGWRD2 # R21 MARK (SPECIAL MARKING FOR R21)
010274,000340: 07,2242 00006 EXTEND
010275,000341: 07,2243 12263 BZF MRKREJCT # NOT SET THEREFORE REGULAR REJECT
010276,000342: 07,2244 31702 CA MRKBUF1 # IS THERE A MARK IN THE BUFFER?
010277,000343: 07,2245 00006 EXTEND
010278,000344: 07,2246 12251 BZF +3 # YES - REJECT MARK IN BUFFER
010279,000345:
010280,000346: 07,2247 00006 EXTEND
010281,000347: 07,2250 62254 BZMF REJCTR22 # NO,SET FLAG TO REJECT MARK PROCESSED-R22
010282,000348:
010283,000349: 07,2251 37702 CA NEGONE # -1 (FOR R22)
010284,000350: 07,2252 55702 TS MRKBUF1 # -0 IN TIME IS FLAG TO R22 SIGNIFYING A
010285,000351: 07,2253 05336 TC RESUME
010286,000352:
010287,000353: 07,2254 34773 REJCTR22 CAF R22CABIT # IS R22 PROCESSING A MARK?
010288,000354: 07,2255 70105 MASK FLAGWRD9
010289,000355: 07,2256 00006 EXTEND
010290,000356: 07,2257 15336 BZF RESUME # NO IGNORE MARK REJECT
010291,000357:
010292,000358: 07,2260 07710 TC UPFLAG
010293,000359: 07,2261 00231 ADRES REJCTFLG # YES - SET FLAG FOR R22
010294,000360: 07,2262 05336 TC RESUME
010295,000361:
010296,000362: 07,2263 34776 MRKREJCT CAF MARKBIT
010297,000363: 07,2264 70075 MASK FLAGWRD1
010298,000364: 07,2265 10000 CCS A
010299,000365: 07,2266 02272 TC REJECT3
010300,000366:
010301,000367: 07,2267 05644 TC ALARM # DONT ACCEPT TWO REJECTS TOGETHER
010302,000368: 07,2270 00110 OCT 110
010303,000369: 07,2271 05336 TC RESUME
010304,000370:
010305,000371: 07,2272 07722 REJECT3 TC DOWNFLAG
010306,000372: 07,2273 00032 ADRES MARKFLG
010307,000373:
010308,000374: 07,2274 24301 REJECT4 INCR MARKINDX # CALL FOR ANOTHER MARK
010309,000375:
010310,000376: 07,2275 37644 REJEXIT CAF PRIO22
010311,000377: 07,2276 05150 TC FINDVAC
010312,000378: 07,2277 E7,1702 EBANK= MRKBUF1
010313,000379: 07,2277 02007 16067 2CADR MKVBDSP
010314,000380:
010315,000381: 07,2301 15336 TCF RESUME
End of include-file SXTMARK.agc. Parent file is MAIN.agc