IGT1CK
* /---   FILE TYPE = E
* /---   BLOCK      IGT1CK     00 000   80/11/11  10.32 
C 
      PROGRAM IGT1CK(TAPE5,OUTPUT)
C       THIS PROGRAM IS USED TO GENERATE CHECKSUMS OF THE 
C       IST1 ASCII/GRAPHICS RESIDENT BINARY. ONE CHECKSUM 
C       IS GENERATED FOR EACH OF THE SIX 1024 BYTE ROMS AND 
C       THEN A CHECKSUM OF THE SIX CHECKSUM BYTES IS
C       GENERATED. THESE SEVEN CHECKSUM VALUES ARE INSERTED 
C       INTO THE BINARY OUTPUT OF THE ASSEMBLER AND 
C       ARE ALSO PRINTED AS PART OF THE LISTING OUTPUT. 
      IMPLICIT INTEGER(A-Z) 
      DIMENSION MEMORY(5120),IN(1000),ITH(5),CHIP(5)
      DATA ITH/2RST,2RND,2RRD,2RTH,2RTH/
      REWIND 5
      DO 5 I=1,5120 
5     MEMORY(I)=0 
      DO 10 I=1,1000
10    IN(I)=0 
      BUFFER IN (5,0) (IN(1),IN(1000))
      IF(UNIT(5)) 20,20,15
15    STOP 100
20    SIZE=(SHIFT(IN(18),-30) .AND. 777777B) - 255
      SIZE=SIZE/6+20
      IF (SIZE .GT. 1000) SIZE = 1000 
      INDEX=1 
      DO 30 I=19,SIZE 
      DO 30 J=1,3 
      DO 30 K=1,2 
      IS = (K-1)*8+(J-1)*20 
      MEMORY(INDEX)=SHIFT(IN(I),-IS) .AND. 377B 
      INDEX=INDEX+1 
      IF(INDEX.GT.5121) GO TO 65
30    CONTINUE
C      PRINT 88,(MEMORY(I),I=1,10)
      IBEG = INDEX-10 
      IEND = INDEX
C      PRINT 88, (MEMORY(I),I=IBEG,IEND)
40    NUMBER=4 $ LENGTT=1024
      DO 50 I=1,NUMBER
      RESULT=0 $ ADDR=I*LENGTT $ COUNT=LENGTT 
45    RESULT=XOR(RESULT,MEMORY(ADDR)) 
      RESULT=SHIFT(RESULT,1)
      J=SHIFT(RESULT,-8).AND.1
      RESULT=RESULT.AND.376B.OR.J 
      ADDR=ADDR-1 $ COUNT=COUNT-1 
      IF(COUNT.NE.0) GO TO 45 
      PRINT 82,I,ITH(I),RESULT
50    CHIP(I) = RESULT
      RESULT=0
      DO 60 I=1,NUMBER
      RESULT=XOR(RESULT,CHIP(I))
      RESULT=SHIFT(RESULT,1)
      J=SHIFT(RESULT,-8).AND.1
60    RESULT=RESULT.AND.376B.OR.J 
      PRINT 81,RESULT 
      GO TO 70
65    PRINT 84
70    CONTINUE
C 
81    FORMAT(/,15X,*CHECKSUM BYTE IS  *,Z2) 
82    FORMAT(/,15X,*CHECKSUM FOR *,I2,R2,* K IS *,Z2) 
84    FORMAT(/,* MEMORY ARRAY EXCEEDED-PROGRAM MUST BE
     XUNDER 5K*)
88    FORMAT(/,* FIRST AND LAST ELEMENTS OF MEMORY *, 
     X10(2X,I5))
      END 
