swh:1:snp:cdcd2bc43331a436e8c659ba93175ef7d7eb339b
Tip revision: 4e5d304eb7cd5589b924ffb8b423b6f15511b35d authored by Ron Burkey on 20 October 2018, 17:47:00 UTC
The sample Block I AGC program TRIVIUM, found at the very end of one of
The sample Block I AGC program TRIVIUM, found at the very end of one of
Tip revision: 4e5d304
AGC_BLOCK_TWO_SELF-CHECK.agc
### FILE="Main.annotation"
## Copyright: Public domain.
## Filename: AGC_BLOCK_TWO_SELF-CHECK.agc
## Purpose: Part of the source code for Aurora (revision 12).
## Assembler: yaYUL
## Contact: Ron Burkey <info@sandroid.org>.
## Website: https://www.ibiblio.org/apollo.
## Pages: 377-403
## Mod history: 2016-09-20 JL Created.
## Mod history: 2016-09-22 MAS Began.
## 2016-10-16 HG Fix operand 5BIT14 -> SBIT14
## DISPLAY -> SDISPLAY
## 2016-10-20 RSB Had to add an EBANK= to make some
## 2CADR's come out right.
## 2016-10-21 RSB Removed yesterday's EBANK=, due to
## yaYUL fixes HG gave me.
## 2016-12-08 RSB Proofed comments with octopus/ProoferComments
## and fixed the errors found.
## This source code has been transcribed or otherwise adapted from
## digitized images of a hardcopy from the private collection of
## Don Eyles. The digitization was performed by archive.org.
## Notations on the hardcopy document read, in part:
## 473423A YUL SYSTEM FOR BLK2: REVISION 12 of PROGRAM AURORA BY DAP GROUP
## NOV 10, 1966
## [Note that this is the date the hardcopy was made, not the
## date of the program revision or the assembly.]
## The scan images (with suitable reduction in storage size and consequent
## reduction in image quality) are available online at
## https://www.ibiblio.org/apollo.
## The original high-quality digital images are available at archive.org:
## https://archive.org/details/aurora00dapg
## Page 377
BANK 20
SBIT1 EQUALS BIT1
SBIT2 EQUALS BIT2
SBIT3 EQUALS BIT3
SBIT4 EQUALS BIT4
SBIT5 EQUALS BIT5
SBIT6 EQUALS BIT6
SBIT7 EQUALS BIT7
SBIT8 EQUALS BIT8
SBIT9 EQUALS BIT9
SBIT10 EQUALS BIT10
SBIT11 EQUALS BIT11
SBIT12 EQUALS BIT12
SBIT13 EQUALS BIT13
SBIT14 EQUALS BIT14
SBIT15 EQUALS BIT15
S+ZERO EQUALS ZERO
S+1 EQUALS BIT1
S+2 EQUALS BIT2
S+3 EQUALS THREE
S+4 EQUALS FOUR
S+5 EQUALS FIVE
S+6 EQUALS SIX
S+7 EQUALS SEVEN
S8BITS EQUALS LOW8 # 00377
CNTRCON OCTAL 00051 # USED IN CNTRCHK
ERASCON1 OCTAL 00062 # USED IN ERASCHK
ERASCON2 OCTAL 01374 # USED IN ERASCHK
ERASCON6 OCTAL 01400 # USED IN ERASCHK
ERASCON3 OCTAL 01462 # USED IN ERASCHK
ERASCON4 OCTAL 01774 # USED IN ERASCHK
S10BITS EQUALS LOW10 # 01777, USED IN ERASCHK
SBNK03 EQUALS PRIO6 # 06000, USED IN ROPECHK
S13BITS OCTAL 17777
CONC+S1 OCTAL 25252 # USED IN CYCLSHFT
OVCON OCTAL 37737 # USED IN RUPTCHK
DVCON OCTAL 37776
CONC+S2 OCTAL 52400 # USED IN CYCLSHFT
ERASCON5 OCTAL 76777
S-7 OCTAL 77770
S-4 EQUALS NEG4
S-3 EQUALS NEG3
S-2 EQUALS NEG2
S-1 EQUALS NEGONE
S-ZERO EQUALS NEG0
EBANK= 3
ADRS1 ADRES SKEEP1
## Page 378
SRADRS ADRES SR
SELFADRS ADRES SELFCHK # SELFCHK RETURN ADDRESS. SHOULD BE PUT
# IN SELFRET WHEN GOING FROM SELFCHK TO
# SHOWSUM AND PUT IN SKEEP1 WHEN GOING
# FROM SHOWSUM TO SELF-CHECK.
ERRORS CA Q
TS SFAIL # SAVE Q FOR FAILURE LOCATION
INCR ERCOUNT # KEEP TRACK OF NUMBER OF MALFUNCTIONS.
TC ALARM
OCT 01102 # SELF-CHECK MALFUNCTION INDICATOR
CCS SMODE
CA S+ZERO
TS SMODE
TC SELFCHK # GO TO IDLE LOOP
TC SFAIL # CONTINUE WITH SELF-CHECK
+0CHK CS A
-0CHK CCS A
TCF ERRORS
TCF ERRORS
TCF ERRORS
TC Q
+1CHK CS A
-1CHK CCS A
TCF ERRORS
TCF ERRORS
CCS A
TCF ERRORS
TC Q
SMODECHK EXTEND
QXCH SKEEP1
TC CHECKNJ # CHECK FOR NEW JOB
CCS SMODE
TC SOPTIONS
TC SMODECHK +2 # TO BACKUP IDLE LOOP
TC SOPTIONS
INCR SCOUNT
TC SKEEP1 # CONTINUE WITH SELF-CHECK
SOPTIONS AD S-7
EXTEND
BZMF +3 # FOR OPTIONS BELOW NINE.
BNKOPTN TC POSTJUMP # GO TO ANOTHER BANK FOR OPTIONS ABOVE 8.
CADR SBNKOPTN
INCR SCOUNT # FOR OPTIONS BELOW NINE.
AD S+7
## Page 379
INDEX A
TC SOPTION1
SOPTION1 TC TC+TCF
SOPTION2 TC IN-OUT1
SOPTION3 TC COUNTCHK
SOPTION4 TC ERASCHK
SOPTION5 TC ROPECHK
SOPTION6 TC MPNMBRS
SOPTION7 TC DVCHECK
SOPTON10 TC SKEEP1 # CONTINUE WITH SELF-CHECK
SELFCHK TC SMODECHK # ** CHARLEY, COME IN HERE
# TC+TCF CHECKS ALL OF THE PULSES OF TCF AND ALL OF THE PULSES OF TC
# EXCEPT ABILITY TO TC TO ERASABLE.
# ALSO FIRST TIME CS FIXED MEMORY IS USED
TC+TCF TC +2
TC CCSCHK
TCF +2 # $ TCF FIXED MEMORY
TC ERRORS
CS S+3 # $ CS FIXED MEMORY
TC Q # $
TC ERRORS
# CCSCHK CHECKS ALL OF CCS EXCEPT RB WG.
# ALSO CHECKS TS ERASABLE, CS SC, AND CS ERASABLE MEMORY.
CCSCHK CCS A # $ CCS SC, C(A) = -3
TC ERRORS
TC ERRORS
TC +2
TC ERRORS
CCS A # $ C(A) = +2, RESULT OF CCS -NUMBER
TC +4
TC ERRORS
TC ERRORS
TC ERRORS
TS SKEEP1 # $ TS ERASABLE
CCS SKEEP1 # $ CCS ERASABLE, C(A) = +1, RESULT OF
TC +4 # CCS +NUMBER
TC ERRORS
TC ERRORS
TC ERRORS
CCS A # $ C(A) = +0, RESULT OF CCS +1, CHECKS CI
TC ERRORS
TC +3
TC ERRORS
TC ERRORS
CS A # $ CS SC
CCS A # $ C(A) = -0, RESULT OF CCS +0
TC ERRORS
## Page 380
TC ERRORS
TC ERRORS
CCS A # $ RESULT OF CCS -0
TC ERRORS
TC +3
TC ERRORS
TC ERRORS
CS SKEEP1 # $ CS ERASABLE. ALSO CHECKS BACK INTO
TC -1CHK # ERASABLE SEQUENCE.
# BZMFCHK CHECKS ALL PULSES OF BZMF.
# ALSO CHECKS CA FIXED MEMORY.
BZMFCHK CAF SBIT9 # $ CA FIXED MEMORY
EXTEND
BZMF ERRBZMF
CS A
EXTEND
BZMF +2 # $
TC ERRORS
CA S+MAX
AD S+1
EXTEND
BZMF ERRBZMF2 # $ + OVERFLOW, CHECK 01-0000
CA S+ZERO
EXTEND
BZMF +2 # $
TC ERRORS
CS A
EXTEND
BZMF +4 # $
TC ERRORS
ERRBZMF TC ERRORS # FROM BZMF WITH +NON-ZERO
ERRBZMF2 TC ERRORS # OVERFLOW WITH +0
# RESTORE1 AND 2 CHECKS INSTRUCTIONS (WITH STAR) ABILITY TO READ BACK INTO
# ERASABLE MEMORY. NOT NORMALLY INTERESTED IN CONTENTS OF A REGISTER.
# FIRST TIME MANY INSTRUCTIONS ARE USED.
# RESTORE1 ALSO CHECKS INDEX (WITHOUT EXTRACODE) ERASABLE, CA ERASABLE,
# AND MASK ERASABLE.
RESTORE1 CAF SRADRS # ADDRESS OF SR
TS SKEEP7
CA S8BITS # 00377
NDX SKEEP7 # $ INDEX ERASABLE *
TS 0000 # TS SR, C(SR) = 00177
CCS SR # C(SR) = 00077 *
NDX SKEEP7 # CHECKS C(SKEEP7) CORRECT
CS 0000 # C(SR) = 00037
AD SR # C(SR) = 00017 *
EXTEND
MSU SR # C(SR) = 00007 *
## Page 381
EXTEND
SU SR # C(SR) = 00003 *
CA SR # $ C(SR) = +1, C(A) = +3, CA ERASABLE *
MASK SR # $ B(SR) = C(SR) = +1, MASK ERASABLE *
TC +1CHK
EXTEND
MP SR
EXTEND
DV SR
CA SR # $ CA ERASABLE
TC +1CHK # MAKES SURE MASK, MP, AND DV DO NOT EDIT.
# RESTORE2 ALSO CHECKS XCH ERASABLE,INDEX (WITH EXTRACODE) ERASABLE AND
# FIXED MEMORY, DCS ERASABLE, CA SC, AND DCA ERASABLE.
RESTORE2 CAF ADRS1 # ADDRESS OF SKEEP1
TS SKEEP6
CA S-1
TS SKEEP1 # -1
CS A
XCH SKEEP1 # $ XCH ERASABLE, C(SKEEP1) = +1
XCH SKEEP2 # $ XCH ERASABLE, C(SKEEP2) = -1
EXTEND
NDX SKEEP6 # $ NDX ERASABLE *
DCA 0000 # DCA ERASABLE *
EXTEND
NDX ADRS1 # $ NDX FIXED MEMORY *
DCS 0000 # $ DCS ERASABLE MEMORY *
TC -1CHK # MAKES SURE DCS ERASABLE OK
CA L # $ CA SC
TC +1CHK
EXTEND
NDX SKEEP6 # MAKE SURE C(SKEEP6) IS STILL CORRECT
DCA 0000 # $ DCA ERASABLE
TC +1CHK
CA L
TC -1CHK
# RESTORE3 CHECKS ABILITY TO RESTORE INSTRUCTIONS BACK INTO ERASABLE
# MEMORY. IT IS ONLY NECESSARY TO RESTORE ONE INSTRUCTION BECAUSE THE
# G REGISTER DOES NOT CHANGE.
# ALSO CHECKS TC TO ERASABLE MEMORY.
RESTORE3 CA SBIT15 # CS
TS SKEEP1 # 40000
CA S+2 # TC Q
TS SKEEP2
CA S+1 # +1
TC SKEEP1 # $ TC ERASABLE
TC -1CHK # FIRST TIME BACK FROM ERASABLE.
TC SKEEP1
TC -0CHK # SECOND TIME BACK FROM ERASABLE.
## Page 382
# BZFCHK CHECKS ALL PULSES OF BZF.
BZFCHK CAF S+5
EXTEND
BZF ERRBZF1 # $
CS A
EXTEND
BZF ERRBZF2 # $
CA S+MAX
AD S+1 # 01-00000
EXTEND
BZF ERRBZF3 # $
CS A
EXTEND
BZF ERRBZF4 # $
CAF S+ZERO
EXTEND
BZF +2 # $
TC ERRORS
CS A
EXTEND
BZF +6 # $
TC ERRORS
ERRBZF1 TC ERRORS # +NON-ZERO
ERRBZF2 TC ERRORS # -NON-ZERO
ERRBZF3 TC ERRORS # 01-00000
ERRBZF4 TC ERRORS # 10-37777
# DXCH+DIM CHECKS ALL PULSES OF DXCH AND DIM.
# ALSO CHECKS TS WITH OVERFLOW, TS SC, CA SC, AND AD ERASABLE.
DXCH+DIM CA S+MAX
AD S+2 # OVERFLOW WITH +1
TS SKEEP1 # $ TS WITH OVERFLOW, +1
TC ERRORS
CS A
TS SKEEP2
CS S+MAX
TS L # $ TS SC, 40000
CS A # 37777
DXCH SKEEP1 # $ DXCH ERASABLE
TC +1CHK
CA L # $ CA SC
TC -1CHK
EXTEND
DIM SKEEP1 # $ DIM ERASABLE, DIM + NUMBER, 37776
EXTEND
DIM SKEEP2 # $ DIM - NUMBER, 40001
CA S+MAX # 37777
AD SKEEP2 # $ AD ERASABLE, +1
TC +1CHK
CS S+MAX # 40000
## Page 383
AD SKEEP1 # -1
TC -1CHK
CA S+1 # +1
EXTEND
DIM A # $ DIM SC, DIM +1
EXTEND
DIM A # $ DIM -0
TC -0CHK
EXTEND
DIM A # $ DIM +0
TC +0CHK
# DAS+INCR CHECKS ALL PULSES OF DAS AND INCR.
# ALSO CHECKS DCA FIXED, LXCH SC, DCA ERASABLE, AD ERASABLE, DCS FIXED,
# DCS ERASABLE, AND XCH SC.
DAS+INCR CA S-1
DAS++ TS L # -1
CA S+2 # +2
DAS A # $ DAS SC, C(A) = +4 AND C(L) = -2
AD S-3 # $ AD FIXED MEMORY
TC +1CHK
CA S+1
AD L # $ AD SC, -1
TC -1CHK
# DAS WITH INTERFLOW IN LOW ORDER AND NET OVERFLOW
DAS+- EXTEND
DCA S+MAX # $DCA FIXED MEMORY
DXCH SKEEP3 # 37777, 40000
CA S-2
TS L
CA S+3 # C(A) = +3, C(L) = -2
DAS SKEEP3 # $ DAS ERASABLE
LXCH A # $ LXCH SC
TC +0CHK
CA L
TC +1CHK
EXTEND
DCA SKEEP3 # $ DCA ERASABLE
LXCH A # C(A) = -1, C(L) = +1
TC -1CHK
CA L
TC +1CHK
# INCRCHK CHECKS ALL INCR PULSES EXCEPT WOVR.
INCRCHK INCR SKEEP4 # $ INCR ERASABLE, -0
AD SKEEP4 # $ AD ERASABLE
TC -0CHK
INCR A # $ INCR SC, +1
TC +1CHK
# DAS WITH OVERFLOW IN LOW ORDER AND NET UNDERFLOW
DAS-+ EXTEND
## Page 384
DCS S+MAX # $ DCS FIXED MEMORY
DXCH SKEEP1 # 40000, 37777
CA S+3 # +3
TS L
CS A # -3
DAS SKEEP1 # $
TC -1CHK
EXTEND
DCS SKEEP1 # $ DCS ERASABLE (+1, -2)
XCH L # $ XCH SC (-2, +1)
AD S+1
TC -1CHK
CA L
TC +1CHK
# MPCHK CHECKS ALL PULSES OF MP, AUG, AND ADS.
MPCHK CA S+1
EXTEND
AUG A # $ AUG SC, +2
TS SKEEP5 # +2
CS A
TS Q # -2
CS A
MP++ EXTEND
MP S+MAX # $ MP FIXED MEMORY, +1, 37776
AD L # 37777
MP+- EXTEND
MP Q # $ MP SC, -1, 40001
ADS L # $ ADS SC, 40000
AD DVCON
TC -1CHK
CA L
MP-+ EXTEND
MP SKEEP5 # $ MP ERASABLE, -1, 40001
TS SKEEP6
EXTEND
AUG SKEEP6 # $ AUG ERASABLE, -2
AD L # 40000
MP-- EXTEND
MP SKEEP6 # $ +1, 37776
TC +1CHK
CS L # 40001
AD DVCON
TC -0CHK
CA S+1
ADS SKEEP6 # $ ADS ERASABLE, +1
TC -1CHK
CA SKEEP6
TC -1CHK
## Page 385
# DVCH AND DVQXCHK CHECK ALL OF PULSES OF DV AND QXCH.
# ALSO CHECKS TS WITH UNDERFLOW
DVCHK CA SBIT14 # 20000
TS SKEEP1
AD A # OVERFLOW
AD S+1
TS L # $ TS SC WITH OVERFLOW, +1
TC ERRORS
CS A
TS SKEEP2 # -1
CA S-ZERO # -0
LXCH SKEEP1 # $ LXCH ERASABLE
DV++ EXTEND
DV SKEEP1 # $ DV ERASABLE, C(A) = 20000, C(L) = +0
CS A
LXCH A
TC +0CHK
DV-- EXTEND
DV SKEEP2 # $ 20000, +0
TS SKEEP4 # 20000
CS A
TS SKEEP3 # -(20000)
AD SBIT14
TC -0CHK
CA L
TC -0CHK
DV+- CA S+MAX
TS L
CA S13BITS
EXTEND
DV SKEEP3 # $ -(37777), +(17777)
XCH L
CS A
DV-+ EXTEND
DV SKEEP4 # $ -(37777), -(17777)
AD DVCON
TC -1CHK
CA S+MAX
XCH L # ALSO PUTS 37777 IN L FOR DV-+,-
AD SBIT14
TC +1CHK
DV-+,+ CS S13BITS # -(17777)
EXTEND
DV SKEEP4
AD L # -(37775)
AD DVCON
TC +1CHK
XCH L
TC -1CHK # ALSO PUTS +0 IN L FOR DVQXCH
DVQXCHK CS DVCON
## Page 386
TS Q # 40001
CS A
EXTEND
DV Q # $ DV SC, -(37777), +(37776)
EXTEND
QXCH L # $ QXCH SC, C(L) = 40001, C(Q) = 37776
AD Q
TC -1CHK
CA L
AD S+MAX
TC +1CHK
EXTEND
QXCH SKEEP1 # $ QXCH ERAS., C(Q) = +1, C(SKEEP1) = +3
CA Q
TC +1CHK
CS SKEEP1 # -3
AD S+2
TC -1CHK
# MSUCHK CHECKS ALL PULSES OF MSU EXCEPT RB WG.
MSUCHK CA S+ZERO
TS SKEEP1 # +0
CS A
TS SKEEP2 # -0
EXTEND
MSU A # $ MSU SC, +0
TC +0CHK
EXTEND
MSU SKEEP2 # $ MSU ERASABLE, +1
TC +1CHK
EXTEND
DCA S+MAX
EXTEND
MSU L # $ CHECKS RUS WA, ALSO -1 FROM NEG. NO.
TS A
TC +2
TC ERRORS
TC -1CHK
# MASKCHK FINISHES CHECKING MASK INSTRUCTION.
MASKCHK CA S+7
TS L
MASK S-7 # $ MASK FIXED MEMORY
TC +0CHK
CA S+1
MASK L # $ MASK SC
TC +1CHK
# NDX+SU FINISHES CHECKING BOTH INDEX INSTRUCTIONS. ALSO CHECKS ALL OF SU
# EXCEPT RB WG.
## Page 387
NDX+SU CA S+1
TS L
TS SKEEP1
NDX A # $ NDX SC
AD 0000 # AD L, +2
EXTEND
SU SKEEP1 # $ SU ERASABLE
TC +1CHK
EXTEND
NDX L # $ NDX SC
SU 0000 # $ SU SC, SU L
TC -1CHK
# D--SC CHECKS DCS SC, DXCH SC, AND DCA SC.
D--SC CA S+2
TS L # +2
CA S+1
EXTEND
DCS A # $ DCS SC, C(L) = -2
TC -1CHK
# AFTER DXCH C(A) = B(Q) = +3, C(L) = B(A) = +0, C(Q) = B(L) = -1.
DXCH L # $ DXCH SC
TS SKEEP3
AD Q
TC +1CHK
CA L
TC +0CHK
CA S-1
TS Q
CS A
EXTEND
# AFTER DCA C(A) = C(L) = C(Q) = B(Q) = -1.
DCA L # $ DCA SC
AD Q
AD SKEEP3
TC +1CHK
CA L
TC -1CHK
# D--LCHK CHECKS THAT OVERFLOW IS LOST IN PROCESS OF GOING THROUGH L REG.
# ALSO CHECKS THAT Q WILL HOLD 16 BITS
D--LCHK CA S-2
TS Q
CA S-MAX
ADS Q
CS Q
TS A
TC ERRORS
EXTEND
DCA L
## Page 388
TS A
TC +2
TC ERRORS
TC -1CHK
# CHECKS OVERFLOW, UNDERFLOW,END-AROUND-CARRY, AND SIGN CHANGE OF ADDER.
# ALSO CHECKS ADS SC WITH OVERFLOW AND TS A WITH UNDERFLOW
ADDRCHK CA SBIT14 # 20000
TS Q
ADS Q # $ ADS SC, OVERFLOW
ADS Q # UNDERFLOW
TS A # $ TS SC WITH UNDERFLOW
TC ERRORS
ADS Q
TC +1CHK
# RUPTCHK CHECKS THAT INTERRUPT DOES NOT OCCUR WHILE OVERFLOW OR UNDERFLOW
# IS IN THE A REGISTER. ALSO CHECKS THAT INHINT RELINT WORK PROPERLY.
RUPTCHK INHINT
CA S+ZERO
TS ZRUPT
RELINT
AD TIME4
TS SKEEP1
TENMS CS SKEEP1
AD TIME4 # WAIT FOR NEXT TIME4 INCREMENT
EXTEND
BZF TENMS
INHINT
CA ZRUPT
EXTEND
BZF +2 # NO INTERRUPT.
TC RUPTCHK # THERE WAS AN INTERRUPT. START AGAIN.
CAF S+1 # 2 1/2 MS UNTILE NEXT T3 INTERRUPT.
TC WAITLIST
EBANK= LST1
2CADR TSKADRS
CA S+MAX
AD OVCON # CONTROLS TIME SPENT IN OF-UF LOOP
RELINT
WAIT CS A
CCS A
TC INHNTCHK
RUPTCON ADRES C(BRUPT)
AD S+2
TC WAIT
INHNTCHK INHINT # T3 RUPT SHOULD BE WAITING
TS SKEEP5
TC ERRORS
## Page 389
RELINT
C(BRUPT) CS ZRUPT # INTERRUPT SHOULD HAPPEN HERE
EXTEND
BZF ERRORS # MAKES SURE AN INTERRUPT DID HAPPEN
TC +5 # END OF RUPTCHK
TSKADRS CS ZRUPT
AD RUPTCON
TC -1CHK
TC TASKOVER
TC SMODECHK
# IN-OUT1 CHECKS ALL PULSES OF WRITE AND READ
IN-OUT1 CA S-1
WRITECHK EXTEND
WRITE Q
LXCH Q # PUT C(Q) IN L
TC -1CHK
READCHK EXTEND # C(L) = 77776
READ L
TC -1CHK
CA L
TC -1CHK
# IN-OUT2 CHECKS ALL PULSES OF ROR AND WOR
IN-OUT2 CS S+3
RORCHK TS L # 77774
CA DVCON # 37776
EXTEND
ROR L # $ ROR, -1
TC -1CHK
WORCHK CA DVCON # C(L) STILL 77774
EXTEND
WOR L # $ WOR, -1
TC -1CHK
CA L
TC -1CHK
# IN-OUT3 CHECKS ALL PULSES OF RAND, WAND, AND RXOR
IN-OUT3 CS DVCON
RANDCHK TS L # 40001
CA S13BITS # 17777
EXTEND
RAND L # $ RAND, +1
TC +1CHK
WANDCHK CA S13BITS # C(L) STILL 40001
EXTEND
WAND L # $ WAND, +1
TC +1CHK
CS S+5
## Page 390
XCH L # ALSO PUT -5 IN L FOR RXORCHK
TC +1CHK
RXORCHK CA S+6
EXTEND
RXOR L # $ RXOR, -3
AD S+2
TC -1CHK
CA L
AD S+4
TC -1CHK
TC SMODECHK
# COUNTCHK COUNTS UP 14 BIT NUMBER WITH SIGN.
# TAKES APPROXIMATELY 8.7 SECONDS.
# ** PUT IN CCS NEWJOB FOR ROPE.
COUNTCHK EXTEND
DCA S+MAX
DXCH SKEEP6 # PUT 37777 IN SKEEP6 AND 40000 IN SKEEP7
+LOOP CA SKEEP6
XCH Q
EXTEND
DCS L
CCS A
TC -NMBR
TC ENDCOUNT
TS SKEEP6
AD SKEEP7
TC -1CHK
INCR SKEEP7
TC +LOOP
-NMBR AD L
TC -1CHK
TC CHECKNJ # CHECK FOR NEW JOB
CS SKEEP6
TC +LOOP +1
ENDCOUNT CA SKEEP7 # -0
AD SKEEP6 # SKEEP6 SHOULD BE +0
TC -0CHK
# O-UFLOW COUNTS DOWN OVERFLOW AND UNDERFLOW NUMBERS.
# TAKES APPROXIMATELY 10.8 SECONDS
O-UFLOW CA S-MAX
TS SKEEP5 # 40000
CS A
OFLOOP INHINT
AD S+MAX
AD S+1
XCH Q
CCS Q
## Page 391
TC -NMBRS
TC ERRORS # CAN PUT IN CONSTANT
TS SKEEP3
TC ERRORS
CA SKEEP3
AD SKEEP5
TC -1CHK
RELINT
TC CHECKNJ # CHECK FOR NEW JOB
CA SKEEP4
EXTEND
DIM SKEEP5
TC OFLOOP
-NMBRS TS SKEEP4
TC ENDOFUF
CA SKEEP4
AD SKEEP5
TC -1CHK
CA SKEEP5
AD S-MAX
AD S-1
TC OFLOOP +3
ENDOFUF CA SKEEP5
TC -0CHK
CS SKEEP4
AD DVCON
TC -1CHK
RELINT
TC SMODECHK
# SKEEP7 HOLDS LOWEST OF TWO ADDRESSES BEING CHECKED.
# SKEEP6 HOLDS B(X+1).
# SKEEP5 HOLDS B(X).
# SKEEP4 CONTROLS CHECKING OF NON-SWITCHABLE ERASABLE MEMORY WITH
# BANK NUMBERS IN EB.
# SKEEP3 HOLDS LAST ADDRESS BEING CHECKED (HIGHEST ADDRESS).
# SKEEP2 HOLDS C(EBANK) DURING CHECKNJ
# ERASCHK TAKES APPROXMATELY 7 SECONDS
ERASCHK CA S+1
TS SKEEP4
0EBANK CA S+ZERO
TS EBANK
CA ERASCON3 # 01462
TS SKEEP7 # STARTING ADDRESS
CA S10BITS # 01777
TS SKEEP3 # LAST ADDRESS CHECKED
TC ERASLOOP
E134567B CA ERASCON6 # 01400
## Page 392
TS SKEEP7 # STARTING ADDRESS
CA S10BITS # 01777
TS SKEEP3 # LAST ADDRESS CHECKED
TC ERASLOOP
2EBANK CA ERASCON6 # 01400
TS SKEEP7 # STARTING ADDRESS
CA ERASCON4 # 01774
TS SKEEP3 # LAST ADDRESS CHECKED
TC ERASLOOP
NOEBANK TS SKEEP4 # +0
CA ERASCON1 # 00062
TS SKEEP7 # STARTING ADDRESS
CA ERASCON2 # 01374
TS SKEEP3 # LAST ADDRESS CHECKED
ERASLOOP INHINT
CA SKEEP7
TS L
INCR L
NDX A
DXCH 0000 # PUTS OWN ADDRESS IN X AND X +1
DXCH SKEEP5 # STORES C(X) AND C(X-1) IN SKEEP6 AND 5
NDX SKEEP7
CS 0001 # CS X+1
NDX SKEEP7
AD 0000 # AD X
TC -1CHK
EXTEND
NDX SKEEP7
DCS 0000 # COMPLEMENT OF ADDRESS OF X AND X+1
NDX SKEEP7
DXCH 0000 # PUT COMPLEMENT OF ADDRESS OF X AND X+1
NDX SKEEP7
CS 0000 # CS X
NDX SKEEP7
AD 0001 # AD X+1
TC -1CHK
DXCH SKEEP5
NDX SKEEP7
DXCH 0000 # PUT B(X) AND B(X+1) BACK INTO X AND X+1
RELINT
CA EBANK # STORES C(EBANK)
TS SKEEP2
TC CHECKNJ # CHECK FOR NEW JOB
CA SKEEP2 # REPLACES B(EBANK)
TS EBANK
INCR SKEEP7
CS SKEEP7
## Page 393
AD SKEEP3
EXTEND
BZF +2
TC ERASLOOP # GO TO NEXT ADDRESS IN SAME BANK
CCS SKEEP4
TC NOEBANK
INCR SKEEP4 # PUT +1 IN SKEEP4
CA EBANK
AD SBIT9
TS EBANK
AD ERASCON5 # 76377 CHECK FOR BANK E3
EXTEND
BZF 2EBANK
CCS EBANK
TC E134567B # GO TO EBANKS 1,3,4,5,6, AND 7
CA ERASCON6 # END OF ERASCHK
TS EBANK
# CNTRCHK PERFORMS A CS OF ALL REGISTERS FROM OCT. 61 THROUGH OCT. 10.
# INCLUDED ARE ALL COUNTERS, T6-1, CYCLE AND SHIFT, AND ALL RUPT REGISTERS
CNTRCHK CAF CNTRCON # 00051
CNTRLOOP TS SKEEP2
AD SBIT4 # +10 OCTAL
INDEX A
CS 0000
CCS SKEEP2
TC CNTRLOOP
# CYCLSHFT CHECKS THE CYCLE AND SHIFT REGISTERS
CYCLSHFT CA CONC+S1 # 25252
TS CYR # C(CYR) = 12525
TS CYL # C(CYL) = 52524
TS SR # C(SR) = 12525
TS EDOP # C(EDOP) = 00125
AD CYR # 37777 C(CYR) = 45252
AD CYL # 00-12524 C(CYL) = 25251
AD SR # 00-25251 C(SR) = 05252
AD EDOP # 00-25376 C(EDOP) = +0
AD CONC+S2 # C(CONC+S2) = 52400
TC -1CHK
AD CYR # 45252
AD CYL # 72523
AD SR # 77775
AD EDOP # 77775
AD S+1 # 77776
TC -1CHK
INCR SCOUNT +1
TC SMODECHK
TC ROPECHK
## Page 394
# SKEEP1 HOLDS SUM
# SKEEP2 HOLDS PRESENT CONTENTS OF ADDRESS IN ROPECHK AND SHOWSUM ROUTINES
# SKEEP2 HOLDS BANK NUMBER IN LOW ORDER BITS DURING SHOWSUM DISPLAY
# SKEEP3 HOLDS PRESENT ADDRESS (00000 TO 01777 IN COMMON FIXED BANKS)
# (04000 TO 07777 IN FXFX BANKS)
# SKEEP3 HOLDS BUGGER WORD DURING SHOWSUM DISPLAY
# SKEEP4 HOLDS BANK NUMBER
# SKEEP5 COUNTS 2 SUCCESSIVE TC SELF WORDS
# SKEEP6 CONTROLS ROPECHK OR SHOWSUM OPTION
# SKEEP7 CONTROLS WHEN ROUNTINE IS IN COMMON FIXED OR FIXED FIXED BANKS
STSHOSUM TC GRABDSP
TC PREGBSY
TC +3
ROPECHK CA S-ZERO
TS SKEEP6 # ROPECHK OPTION
CA S+ZERO
TS SKEEP4 # BANK NUMBER
CA S+1
COMMFX TS SKEEP7
CA S+ZERO
TS SKEEP1
TS SKEEP3
CA S+1
TS SKEEP5 # COUNTS DOWN 2 TC SELF WORDS
COMADRS CA SKEEP3
AD SKEEP4
TC DATACALL
TC ADSUM
AD SBIT11 # 02000
TC ADRSCHK
FXFX CS A
TS SKEEP7
EXTEND
BZF +3
CA SBIT12 # 04000, STARTING ADDRESS OF BANK 02
TC +2
CA SBNK03 # 06000, STARTING ADDRESS OF BANK 03
TS SKEEP3
CA S+ZERO
TS SKEEP1
CA S+1
TS SKEEP5 # COUNTS DOWN 2 TC SELF WORDS
FXADRS EXTEND
NDX SKEEP3
DCA 0000
TC ADSUM
TC ADRSCHK
## Page 395
ADSUM TS SKEEP2
AD SKEEP1
TS SKEEP1
CAF S+ZERO
AD SKEEP1
TS SKEEP1
CS SKEEP2
AD SKEEP3
TC Q
ADRSCHK CCS A
TC CONTINU
TC CONTINU
TC CONTINU
CCS SKEEP5
TC CONTINU +1
CA L
TC ADSUM
TC SOPTION # GO TO ROPECHK SHOSUM OPTION
CONTINU CA S+1 # MAKE SURE TWO CONSECUTIVE TC SELF WORDS
TS SKEEP5
CCS SKEEP6 # +1 IN SKEEP6, SHOWSUM VIA EXECUTIVE
CCS NEWJOB
TC CHANG1
TC +2
TC CHECKNJ # -0 IN SKEEP6 FOR ROPECHK
ADRS+1 INCR SKEEP3
CCS SKEEP7
TC COMADRS
TC COMADRS
TC FXADRS
TC FXADRS
NXTBNK CA SKEEP4
AD SBIT11
TS SKEEP4
TC +3
CA SBIT15
TS SKEEP4
AD NOBANKNO # FIRST BANK NOT USED.
EXTEND
BZF ENDSUMS
CCS SKEEP7
TC COMMFX
CA S+1
TC FXFX
CA SBIT7 # CAN BE ANY NUMBER LARGER THAN 36 DECIMAL
TC COMMFX
## Page 396
ENDSUMS CCS SKEEP6
TC ROPECHK +2 # START SHOWSUM AGAIN
S+MAX OCTAL 37777 # ** S+MAX AND S-MAX MUST BE TOGETHER
S-MAX OCTAL 40000 # FOR DOUBLE PRECISION CHECKING.
TC MPNMBRS -1 # ROPECHK IS COMPLETED
SOPTION CCS SKEEP6 # DECIDE ON ROPECHK OR SHOWSUM OPTION
TC SDISPLAY
VNCON OCTAL 00501 # USED IN SHOWSUM. DISPLAY 3 REGISTERS.
NOBANKNO OCTAL 33777 # * CONSTANT, COMPLEMENT OF LAST BANK +1.
# CHANGE TO 33777 IF BANK 21 IS LAST BANK USED
BNKCHK CCS SKEEP1 # WHEN C(SKEEP6) = -0
TC +4
SCADR FCADR SDISPLAY # * CONSTANT, USED IN SHOWSUM ONLY
TC +2
CA S-1 # FOR BANK 00
TS SKEEP1
CA SKEEP4
TC LEFT5
CS A
AD SKEEP1
TC -1CHK
TC NXTBNK
# INITIALIZE SKEEP6 TO +1 TO PERFORM SHOWSUM
# START OF ROUTINE THAT DISPLAYS SUM OF EACH BANK
SHOWSUM CAF S+1
TS SKEEP6 # SHOWSUM OPTION
CAF S+ZERO
TS SMODE # PUT SELF-CHECK TO SLEEP
CA SELFADRS # INITIALIZE SELFRET TO GO TO SELFCHK.
TS SELFRET
INHINT
CAF PRIO2
TC NOVAC
EBANK= SELFRET
2CADR STSHOSUM
RELINT
TC ENDOFJOB
SDISPLAY CA SKEEP4
TC LEFT5 # CYCLES LEFT 5 PLACES
XCH SKEEP2 # SKEEP2 HOLDS BANK NUMBER DURING DISPLAY
TS SKEEP3 # SKEEP3 HOLDS BUGGER WORD DURING DISPLAY
NOKILL CAF ADRS1 # ADDRESS OF SKEEP1
TS MPAC +2
CAF VNCON # DISPLAY 3 REGISTERS
TC NVSUB
TC SBUSY
## Page 397
TC FLASHON
TC ENDIDLE
TC +3 # FINISHED WITH SHOWSUM
TC NXTBNK
TC NOKILL # SO CAN LOAD WITHOUT KILLING SHOWSUM
TC FREEDSP
CA SELFADRS # INITIALIZE SKEEP1 TO GO TO SELFCHK.
TS SKEEP1
TC ENDOFJOB
SBUSY CAF SCADR
TC NVSUBUSY
TC SMODECHK
# MULTIPLY SUBROUTINE TAKES APPROXIMATELY 19 SECONDS.
# (37777) X (37777 THROUGH 00001)
# C(A) COUNTS DOWN. C(L) COUNTS UP.
MPNMBRS CAF S+MAX
TS SKEEP2
CAF S+MAX
EXTEND
MP SKEEP2
AD L # C(A) = 37777
AD S-MAX
TC -0CHK
TC CHECKNJ # CHECK FOR NEW JOB
CCS SKEEP2
TS SKEEP2
CCS SKEEP2
TC MPNMBRS +2
# (-1) X (37777 THROUGH 00001)
CAF S+MAX
TS SKEEP2
MPHIGH1 CAF S-1
EXTEND
MP SKEEP2 # C(A) = -0
TC -0CHK
CA L
AD SKEEP2
TC -0CHK
TC CHECKNJ # CHECK FOR NEW JOB
CCS SKEEP2
TS SKEEP2
CCS SKEEP2
TC MPHIGH1
# INTERCHANGE MULTIPLIER AND MULTIPLICAND
# (37777 THROUGH 00001) X (37777)
# C(A) COUNTS DOWN. C(L) COUNTS UP.
## Page 398
CAF S+MAX
TS SKEEP1
MPAGAIN CA SKEEP1
EXTEND
MP S+MAX
AD L # C(A) = 37777
AD S-MAX
TC -0CHK
TC CHECKNJ # CHECK FOR NEW JOB
CCS SKEEP1
TS SKEEP1
CCS SKEEP1
TC MPAGAIN
# (37777 THROUGH 00001) X (-1)
CAF S+MAX
TS SKEEP1
MPHIGH2 CA SKEEP1
EXTEND
MP S-1
TC -0CHK
CA L
AD SKEEP1
TC -0CHK
TC CHECKNJ # CHECK FOR NEW JOB
CCS SKEEP1
TS SKEEP1
CCS SKEEP1
TC MPHIGH2
TC SMODECHK
# ONCE THROUGH DIVIDE SUBROUTINE TAKES APPROXIMATELY 0.01 SECOND.
# TOTAL TIME SPENT IN DIVIDE SUBROUTINE IS APPROXIMATELY 21.5 SECONDS
# DIVIDE +-/17777/ +-/37777/ BY +-/20000/. THE CONTENTS OF THE A REGISTER
# AND THE L REGISTER WILL HAVE OPPOSITE SIGNS BEFORE DIVISION. THE
# QUOTIENT SHOULD BE +-/37774/ DEPENDING ON THE SIGN OF A AND THE SIGN
# OF THE DIVISOR. THE REMAINDER = +-1 DEPENDING ON THE SIGN OF A
DVCHECK CS SBIT12 # -(04000)
TS SKEEP4
DVLOOP INCR SKEEP4
DV1CHK CA SBIT14 # 20000
TS SKEEP1
CS A
TS SKEEP2
DV1++ CS S+MAX
TS L # 40000
CA S13BITS
EXTEND
DV SKEEP1 # +37774, +1
TS SKEEP7 # 37774
## Page 399
CA S-MAX
XCH L # ALSO PUT 40000 IN L
TC +1CHK
DV1+- CA S13BITS # 17777
EXTEND
DV SKEEP2 # -37774, +1
AD SKEEP7
TC -0CHK
CA S+MAX
XCH L # ALSO PUT 37777 IN L
TC +1CHK
DV1-+ CS S13BITS # 60000
EXTEND
DV SKEEP1 # -37774, -1
TS SKEEP6
AD SKEEP7
TC -0CHK
CA S+MAX
XCH L # ALSO PUT 37777 IN L
TC -1CHK
DV1-- CS S13BITS # 60000
EXTEND
DV SKEEP2 # +37774, -1
AD SKEEP6
TC -0CHK
CA S+MAX
XCH L # ALSO PUT 37777 IN L FOR DV2
TC -1CHK
CA SKEEP6 # -37774
AD S-2 # -37776
AD S+MAX
TC +1CHK
# DIVIDE +17777 + 37777 BY +20000. THE RESULT SHOULD BE +37777 WITH
# +17777 REMAINDER.
DV2CHK CA S13BITS
EXTEND
DV SKEEP1
AD S-MAX
TC -0CHK
CS SBIT14 # -20000
AD L
TC -1CHK
# DIVIDE +37776 BY +37776. THE RESULT SHOULD BE +37777 AND THE
# REMAINDER SHOULD BE +37776.
DV4CHK CA S+ZERO
TS L
CA DVCON
TS SKEEP1 # 37776
## Page 400
EXTEND
DV SKEEP1
CS A
AD DVCON
TC -1CHK
CA L # 37776
AD S-MAX
TC -1CHK
# DIVIDE SAME (ZERO). THE CONTENTS OF THE A REGISTER AND L REGISTER WILL
# HAVE OPPOSITE SIGNS BEFORE DIVISION. THE QUOTIENT WILL BE + OR - MAX.,
# DEPENDING UPON THE SIGN OF THE L REGISTER AND THE SIGN OF THE DIVISOR.
# C(L) REMAINS THE SAME BECAUSE IT IS THE DIVIDEND.
DV5CHK CA S+ZERO
TS SKEEP1 # +0
TS L
CS A
TS SKEEP2 # -0
DV5++ EXTEND
DV SKEEP1 # +37777, +0
TS SKEEP7 # 37777
CA L
TC +0CHK
DV5+- CS A
EXTEND
DV SKEEP2 # 40000, +0
TS SKEEP6 # 40000
AD SKEEP7
TC -0CHK
CS A
XCH L # ALSO PUT -0 IN L
TC +0CHK
DV5-+ EXTEND
DV SKEEP1 # 40000, -0
AD SKEEP7
TC -0CHK
CA L
TC -0CHK
DV5-- EXTEND
DV SKEEP2 # 37777, -0
AD SKEEP6
TC -0CHK
CA L
TC -0CHK
CA SKEEP6 # CHECK QUOTIENT
AD DVCON
TC -1CHK
TC CHECKNJ # CHECK FOR NEW JOB
CA SKEEP4
## Page 401
EXTEND
BZMF DVLOOP
INCR SCOUNT +2
TC SELFCHK # START SELF-CHECK AGAIN
ENDSLFS1 EQUALS
SETLOC ENDFAILS
SBNKOPTN TS SKEEP1
CS A # GO TO BACKUP IDLE LOOP IF C(SMODE) IS
AD TWO # GREATER THAN OCTAL 11
EXTEND
BZMF TOSMODE -2
CA S+ZERO # ZERO SMODE FOR OPTIONS ABOVE 8.
TS SMODE
CA SKEEP1
NDX A
TC SOPTON11 -1
SOPTON11 TC DSKYCHK
CA S+ZERO
TS SMODE
TOSMODE TC POSTJUMP
CADR SMODECHK
# THE FOLLOWING CONSTANTS ARE USED BY DSKYCHK.
DSKYCODE OCTAL 05265 # 00
OCTAL 04143 # 11
OCTAL 05471 # 22
OCTAL 05573 # 33
OCTAL 04757 # 44
OCTAL 05736 # 55
OCTAL 05634 # 66
OCTAL 05163 # 77
OCTAL 05675 # 88
OCTAL 05777 # 99
+-ZERO OCTAL 07265
11DEC. OCTAL 00013
# BITS 2 AND 6 TURN ON THE COMPUTER ACTIVITY AND VERB-NOUN FLASH.
S11CHAN OCTAL 00042
DSKYCHK CAF TEN
TS SKEEP3
INHINT
CAF S+1 # SET UP TEN MS INTERRUPT
TC WAITLIST
2CADR NXTNMBR
## Page 402
RELINT
TC TOSMODE # GO TO IDLE LOOP
SDSPTAB TS SKEEP3
INHINT
NDX SKEEP3
CS DSKYCODE
SBLANKS TS DSPTAB
TS DSPTAB +1
TS DSPTAB +2
TS DSPTAB +3
TS DSPTAB +4
TS DSPTAB +5
TS DSPTAB +6
TS DSPTAB +7
TS DSPTAB +8D
TS DSPTAB +9D
TS DSPTAB +10D
CA 11DEC.
TS NOUT
DSKYWAIT INHINT
CAF BIT10 # 5.12 SECOND WAIT
TC WAITLIST
2CADR NXTNMBR
RELINT
TC TASKOVER
NXTNMBR CCS SKEEP3
TC SDSPTAB # 9 THROUGH 0
TC -SIGN # -ZEROS
TC +SIGN # +ZEROS
CCS SKEEP2
TC NODSPLAY # PUTS BLANKS IN DSKY DISPLAY
TC LITESOUT # TURN OFF LIGHTS
-SIGN CS S+1
TS SKEEP3
CA S11CHAN # TURN ON VERB-NOUN FLASH
EXTEND # AND COMPUTER ACTIVITY LIGHTS.
WOR DSALMOUT
CS +-ZERO
INHINT
TS DSPTAB
TS DSPTAB +3
TS DSPTAB +5
CAF THREE
TS NOUT
TC DSKYWAIT
## Page 403
+SIGN CS ZERO
TS SKEEP3
CA S+1
TS SKEEP2
INHINT
CS +-ZERO
TS DSPTAB +1
TS DSPTAB +4
TS DSPTAB +6
CAF THREE
TS NOUT
TC DSKYWAIT
NODSPLAY TS SKEEP2 # +0
CS BIT12 # BLANKS
INHINT
TC SBLANKS # PUTS BLANKS IN ALL DISPLAYS
LITESOUT CS S11CHAN
EXTEND
WAND DSALMOUT # TURN OFF COMPUTER ACTIVITY LIGHT.
TC TASKOVER # END OF DSKYCHK
ENDSLFS2 EQUALS