Source Code
![]() |
YAYUL: ASSEMBLE REVISION 5 OF PROGRAM BOREALIS BY MSTEWART MAR. 27,2017This is a modern AGC system self-test program, though based on the Apollo-era AURORA 12 program, and was not written by the original AGC developers, but rather by Mike Stewart. All of the original AURORA 12 DAP code added by the DAP Group has been removed, and extensive new system test code has been added in its place. This allows more in-depth testing of CPU behavior, both in AGC software simulations and hardware simulations. |
001214,000002: ## Copyright: Public domain.
001215,000003: ## Filename: INTER-BANK_COMMUNICATION.agc
001216,000004: ## Purpose: This program is designed to extensively test the Apollo Guidance Computer
001217,000005: ## (specifically the LM instantiation of it). It is built on top of a heavily
001218,000006: ## stripped-down Aurora 12, with all code ostensibly added by the DAP Group
001219,000007: ## removed. Instead Borealis expands upon the tests provided by Aurora,
001220,000008: ## including corrected tests from Retread 44 and tests from Ron Burkey's
001221,000009: ## Validation.
001222,000010: ## Assembler: yaYUL
001223,000011: ## Contact: Mike Stewart <mastewar1@gmail.com>.
001224,000012: ## Website: www.ibiblio.org/apollo/index.html
001225,000013: ## Mod history: 2016-12-20 MAS Created from Aurora 12 (with much DAP stuff removed).
001226,000014: ## 2017-01-04 MAS Pulled back Sunburst's DATACALL and SUPDACALL because
001227,000015: ## Aurora didn't have any superbank handling.
001228,000016:
001229,000017: # THE FOLLOWING ROUTINE CAN BE USED TO CALL A SUBROUTINE IN ANOTHER BANK. IN THE BANKCALL VERSION, THE
001230,000018: # CADR OF THE SUBROUTINE IMMEDIATELY FOLLOWS THE TC BANKCALL INSTRUCTION, WITH C(A) AND C(L) PRESERVED.
001231,000019:
001232,000020: 4065 SETLOC ENDINTFF
001233,000021: 4065 52120 BANKCALL DXCH BUF2 # SAVE INCOMING A,L.
001234,000022: 4066 50002 INDEX Q # PICK UP CADR.
001235,000023: 4067 30000 CA 0
001236,000024: 4070 24002 INCR Q # SO WE RETURN TO THE LOC. AFTER THE CADR.
001237,000025:
001238,000026: # SWCALL IS IDENTICAL TO BANKCALL, EXCEPT THAT THE CADR ARRIVES IN A.
001239,000027:
001240,000028: 4071 54001 SWCALL TS L
001241,000029: 4072 22004 LXCH FBANK # SWITCH BANKS, SAVING RETURN.
001242,000030: 4073 76426 MASK LOW10 # GET SUB-ADDRESS OF CADR.
001243,000031: 4074 56002 XCH Q # A,L NOW CONTAINS DP RETURN.
001244,000032: 4075 52120 DXCH BUF2 # RESTORING INPUTS IF THIS IS A BANKCALL.
001245,000033: 4076 50002 INDEX Q
001246,000034: 4077 02000 TC 10000 # SETTING Q TO SWRETURN.
001247,000035:
001248,000036: 4100 56120 SWRETURN XCH BUF2 +1 # COMES HERE TO RETURN TO CALLER. C(A,L)
001249,000037: 4101 56004 XCH FBANK # ARE PRESERVED FOR RETURN.
001250,000038: 4102 56120 XCH BUF2 +1
001251,000039: 4103 00117 TC BUF2
001252,000040:
001253,000041: # THE FOLLOWING ROUTINE CAN BE USED AS A UNILATERAL JUMP WITH C(A,L) PRESERVED AND THE CADR IMMEDIATELY
001254,000042: # FOLLOWING THE TC POSTJUMP INSTRUCTION.
001255,000043:
001256,000044: 4104 56002 POSTJUMP XCH Q # SAVE INCOMING C(A).
001257,000045: 4105 50000 INDEX A # GET CADR.
001258,000046: 4106 30000 CA 0
001259,000047:
001260,000048: # BANKJUMP IS THE SAME AS POSTJUMP, EXCEPT THAT THE CADR ARRIVES IN A.
001261,000049:
001262,000050: 4107 54004 BANKJUMP TS FBANK
001263,000051: 4110 76426 MASK LOW10
001264,000052: 4111 56002 XCH Q # RESTORING INPUT C(A) IF THIS WAS A
001265,000053: 4112 50002 INDEX Q # POSTJUMP.
001266,000054: 4113 12000 TCF 10000
001267,000055:
001268,000056: # THE FOLLOWING ROUTINE GETS THE RETURN CADR SAVED BY SWCALL OR BANKCALL AND LEAVES IT IN A.
001269,000057:
001270,000058: 4114 36426 MAKECADR CAF LOW10
001271,000059: 4115 70117 MASK BUF2
001272,000060: 4116 60120 AD BUF2 +1
001273,000061: 4117 00002 TC Q
001274,000062:
001275,000063: # Pulled back from Sunburst 120 because Aurora 12 had no superbank handling.
001276,000064: # THE FOLLOWING ROUTINE OBTAINS THE ONE WORD AT THE ADDRESS ARRIVING IN A, AND LEAVES IT IN A. ENTER
001277,000065: # WITH THE CADR IN A, AT DATACALL WITH JUNK IN L IF NOT SWITCHING SUPERBANKS, OTHERWISE AT SUPDACAL WITH SUPERBANK
001278,000066: # BITS IN BITS 7-5 IN L (BITS 15-8 AND 4-1 MAY BE JUNK). DEBRIS = MTEMP. INHINTS FOR ABOUT 165 MUSEC.
001279,000067:
001280,000068: 4120 54001 DATACALL TS L # SAVE CADR (SOLE INPUT HERE).
001281,000069: 4121 00006 EXTEND
001282,000070: 4122 00007 READ SUPERBNK # THIS PROLOGUE MAKES SUPERSWITCH VACUOUS.
001283,000071: 4123 56001 XCH L # CADR IN A, SUPERBITS IN L.
001284,000072:
001285,000073: 4124 54121 SUPDACAL TS MPTEMP
001286,000074: 4125 56004 XCH FBANK # SET FBANK FOR DATA.
001287,000075: 4126 00006 EXTEND
001288,000076: 4127 04007 ROR SUPERBNK # SAVE FBANK IN BITS 15-11, AND
001289,000077: 4130 56121 XCH MPTEMP # SUPERBANK IN BITS 7-5.
001290,000078: 4131 76426 MASK LOW10
001291,000079: 4132 56001 XCH L # SAVE REL. ADR. IN BANK, FETCH SUPERBITS.
001292,000080: 4133 00004 INHINT # BECAUSE RUPT DOES NOT SAVE SUPERBANK.
001293,000081: 4134 00006 EXTEND
001294,000082: 4135 01007 WRITE SUPERBNK # SET SUPERBANK FOR DATA.
001295,000083: 4136 50001 INDEX L
001296,000084: 4137 32000 CA 10000
001297,000085:
001298,000086: 4140 56121 XCH MPTEMP # SAVE 1ST WD, FETCH OLD FBANK AND SBANK.
001299,000087: 4141 00006 EXTEND
001300,000088: 4142 01007 WRITE SUPERBNK # RESTORE SUPERBANK.
001301,000089: 4143 00003 RELINT
001302,000090: 4144 54004 TS FBANK # RESTORE FBANK.
001303,000091: 4145 30121 CA MPTEMP # RECOVER FIRST WORD OF DATA.
001304,000092: 4146 00002 RETURN # 24 WDS. DATACALL 516 MU, SUPDACAL 432 MU
001305,000093:
001306,000094: # THE FOLLOWING SUBROUTINES PROVIDE TO THE BASIC PROGRAMMER ENTRY INTO AND RETURN FROM ANY INTERPRETIVE
001307,000095: # CODING WHICH DOES NOT USE THE ENTERING CONTENTS OF Q AND WHICH RETURNS VIA DANZIG. C(A) AND C(L) ARE SAVED.
001308,000096:
001309,000097: # USER'S RESPONSIBILITY TO FILL IN ADVANCE THE APPROPRIATE OPERAND AND ADDRESS REGISTERS USED BY THE
001310,000098: # INTERPRETIVE CODING SUCH AS MPAC, BUF, ADDRWD, ETC.; AND TO CONFIRM THAT THE INTERPRETIVE CODING MEETS THE
001311,000099: # ABOVE RESTRICTIONS WITH RESPECT TO Q AND DANZIG.
001312,000100:
001313,000101: # USEPRET AND USPRCADR MUST NOT BE USED IN INTERRUPT.
001314,000102:
001315,000103: # 1. USEPRET ACCESSES INTERPRETIVE CODING WHICH CAN BE ENTERED WITHOUT CHANGING FBANK.
001316,000104: # THE CALLING SEQUENCE IS AS FOLLOWS:
001317,000105:
001318,000106: # L TC USEPRET
001319,000107: # L+1 TC,TCF INTPRETX TC,TCF MEANS TC OR TCF
001320,000108: # INTPRETX IS THE INTERPRETIVE CODING
001321,000109: # RETURN IS TO L+2
001322,000110:
001323,000111: # 2. USPRCADR ACCESSES INTERPRETIVE CODING IN OTHER THAN THE USER'S FBANK. THE CALLING SEQUENCE IS AS FOLLOWS:
001324,000112:
001325,000113: # L TC USPRCADR
001326,000114: # L+1 CADR INTPRETX INTPRETX IS THE INTERPRETIVE CODING
001327,000115: # RETURN IS TO L+2
001328,000116:
001329,000117: 4147 56002 USEPRET XCH Q # FETCH Q, SAVING A
001330,000118: 4150 54150 TS LOC # L+1 TO LOC
001331,000119: 4151 30004 CA FBANK
001332,000120: 4152 54151 TS BANKSET # USERS BANK TO BANKSET
001333,000121: 4153 37650 CA BIT8
001334,000122: 4154 54023 TS EDOP # EXIT INSTRUCTION TO EDOP
001335,000123: 4155 30002 CA Q # RETRIEVE ORIGINAL A
001336,000124: 4156 00150 TC LOC
001337,000125:
001338,000126: 4157 54150 USPRCADR TS LOC # SAVE A
001339,000127: 4160 37650 CA BIT8
001340,000128: 4161 54023 TS EDOP # EXIT INSTRUCTION TO EDOP
001341,000129: 4162 30004 CA FBANK
001342,000130: 4163 54151 TS BANKSET # USERS BANK TO BANKSET
001343,000131: 4164 50002 INDEX Q
001344,000132: 4165 30000 CA 0
001345,000133: 4166 54004 TS FBANK # INTERPRETIVE BANK TO FBANK
001346,000134: 4167 76426 MASK LOW10 # YIELDS INTERPRETIVE RELATIVE ADDRESS
001347,000135: 4170 56002 XCH Q # INTERPRETIVE ADDRESS TO Q, FETCHING L+1
001348,000136: 4171 56150 XCH LOC # L+1 TO LOC, RETRIEVING ORIGINAL A
001349,000137: 4172 50002 INDEX Q
001350,000138: 4173 12000 TCF 10000
001351,000139:
001352,000140: # THE FOLLOWING ROUTINES ARE IDENTICAL TO BANKCALL AND SWCALL EXCEPT THAT THEY ARE USED IN INTERRUPT.
001353,000141:
001354,000142: 4174 52077 IBNKCALL DXCH RUPTREG3 # USES RUPTREG3,4 FOR DP RETURN ADDRESS.
001355,000143: 4175 50002 INDEX Q
001356,000144: 4176 30000 CAF 0
001357,000145: 4177 24002 INCR Q
001358,000146:
001359,000147: 4200 54001 ISWCALL TS L
001360,000148: 4201 22004 LXCH FBANK
001361,000149: 4202 76426 MASK LOW10
001362,000150: 4203 56002 XCH Q
001363,000151: 4204 52077 DXCH RUPTREG3
001364,000152: 4205 50002 INDEX Q
001365,000153: 4206 02000 TC 10000
001366,000154:
001367,000155: 4207 56077 ISWRETRN XCH RUPTREG4
001368,000156: 4210 56004 XCH FBANK
001369,000157: 4211 56077 XCH RUPTREG4
001370,000158: 4212 00076 TC RUPTREG3
001371,000159: 4213 ENDIBNKF EQUALS
End of include-file INTER-BANK_COMMUNICATION.agc. Parent file is MAIN.agc