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