Source Code

   YAYUL: ASSEMBLE REVISION 5 OF PROGRAM BOREALIS       BY MSTEWART MAR. 27,2017
This 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